前言:组件赋值在spring中也是十分重要的部分,下面小编总结演示属性值。
- 组件赋值使用的注解如下:
注解名 | @Value | @Autowired | @Qualifier | @PropertySource | @PropertySources | @Profile |
---|---|---|---|---|---|---|
使用场景 | 在Bean中添加默认值 | 自动注入场景 | 精确加载ID容器 | 加载配置文件 | 加载多个配置文件 | 加载配置项 |
- @Value:标注在Bean成员上
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Color {
@Value("小明")
private String name;
@Value("#{20 -2}")
private Integer num;
@Value("${person.properties}")
private String propertiesName;
补充:支持spel表达式(#{ }),支持配置文件获取值(${ } )
-
配置文件获取值需要结合注解@PropertySource(classpath:/xxx.properties)
-
配置文件值如下:person.properties=大肥猫
-
加载配置文件
-
测试结果
补充:还可以通过环境变量获取properties的值,具体实现(getEnvironment().getProperty(“person.properties”))
-
@Autowired:自动注入(优先按照类型从容器中找组件)
-
注入@Controller,@Service模拟@Autowired注入。
-
扫描
- 测试(容器中的组件被注入)
-
-
@Qualifier:容器筛选注入组件
- 当自动注入碰到多个同类型的组件?
- 在controller中自动注入people。
- 测试
总结:在不指定加载哪一个Bean组件的情况下,默认将变量名作为ID加载
- 使用@Qualifier注解指定加载Bean组件。
说明:两个people对象都是声明为加载组件ID为people的,接下来看测试结果。
总结:使用注解(@Qualifier)指定加载了指定ID组件
-
拓展:@Primary && @Resources(JSR250)&& @Inject(JSR330)
@Primary注解,标注被首要加载。
在ID为people2上标注@Primary注解,表示优先加载。
为了明显区分优先级,在people2中添加注解@Qualifier,加载id为people的组件
测试结果如下
-
@Resources(JSR250)和 @Autowired注入效果一致,只是此注解由jdk8提供,不支持@Primary注解。
- @Resources注解,因为不是Spring提供的注解,自然会对Spring注解失效,仅提供注入效果.(@Qulifier和@Primary均失效)
- @Profile 注解:切换环境配置
- 搭建4种环境下的数据源。
@Configuration
public class MainProfile {
@Profile("default")
@Bean
public Color colorDefault(){
return new Color("default环境的Color");
}
@Profile("test")
@Bean
public Color colorTest(){
return new Color("test环境的Color");
}
@Profile("dev")
@Bean
public Color colorDev(){
return new Color("dev环境的Color");
}
@Profile("prod")
@Bean
public Color colorProd(){
return new Color("prod环境的Color");
}
}
-
默认是加载default环境下的数据源。
-
在命令行中切换数据源。
再次测试:环境已经被切换成test,组件也加载成test环境下的ColorTest组件。