接上文
注释掉@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就是方法名@Beanpublic HelloService helloService08(){System.out.println("配置类@Bean给容器中添加组件了");return new HelloService();}
}
配置文件占位符
可以用:指定默认值