接上文
注释掉@ConfigurationProperties使用@Value注解
/** * <bean class="Person"> * <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{spel}"></property> * <bean/> */ //Spring底层注解 @Value("${person.last-name}") private String lastName; @Value("#{11*2}") private Integer age;
测试可以获取到
- @configurationpropertis @Value
- 功能: 批量注入 一个个指定
- 松散绑定: 支持。last-name等价于lastName 不支持
- SPEL 不支持 支持
- JSR303数据校验 支持。校验在属性中@Email 不支持
- 复杂类型封装 支持 不支持 ${person.dogs}报错
如果只是在某个业务需要获取一下配置文件中的某个值,使用@Value
如果专门编写一个javaBean和配置文件进行映射,就直接用@configurationProperties批量注入
@PropertySource 和 @ImportResource
@PropertySource:加载指定的配置文件
测试通过
@ImportResource
拿到ioc容器
自己编写的配置文件不能生效自动识别
@ImportResource(locations = {"classpath:beans.xml"})导入spring的配置文件让其生效
加到测试类上,测试就可以找到了
SpringBoot推荐给容器添加组件的方式: 全注解的方式
1.配置类
service下有一个服务类
新建config目录,创建一个配置类
下图 启动测试类,上图可见成功了
如果改成下图就会查找失败
springboot推荐注解方式@Bean给容器中添加组件
package com.tabctrlshift.springboot.config; import com.tabctrlshift.springboot.service.HelloService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; //指明sb当前类这是一个配置类 //以前用<bean>标签 @Configuration public class MyAppConfig { // 将方法的返回值添加到容器中,容器中这个组件默认id就是方法名 @Bean public HelloService helloService08(){ System.out.println("配置类@Bean给容器中添加组件了"); return new HelloService(); } }
配置文件占位符
可以用:指定默认值