- 使用@Autowired 自动装配
这个注解可以使用在类和setter 方法属性上
public class MovieRecommender {
@Autowired(required=false)
@Qualifier("main")
private MovieCatalog movieCatalog;
// ...
}
Qualifier:属性表示在按类型查找有歧义时,按Qualifier 指定的标识进行查找
required=false:表示没有可装配的对象时,可以为null
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Autowired(required = false)
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// ...
}
setter 方法上的@Autowired 修饰方法形参
@Autowired 还可以放在构造方法上,或者其他任何方法上
- @Primary
表示在没有使用Qualifier 明确指定的情况下,首选使用这个bean
@Bean
@Primary
public MovieCatalog firstMovieCatalog() { ... }
- spring 还支持@Resource(JSR250) 和 @Inject (JSR330),它们都是java规范的注解
- @Resource 可以和@Autowired 一样实现自动装配功能,但不能和spring 的@Qualifier, @Primary等注解结合使用
- @Inject 可以和 @Primary 结合使用
- @Autowired 标注在构造方法与@bean 方法上
@bean
public Color color(@Autowired Car car) {
Color color = new Color();
color.setCar(car);
return color;
}
这里的@Autowired 可以省略
@Autowired
public Boss(Car car) {
this.car = car;
}
构造方法在只有一个的情况下@Autowired 可以省略
-
实现Aware 接口,可以获取bean的一些相关信息
-
Profile
使用Profile 可以动态的激活和切换一系列组件,未指定@Profile 标识的bean 任何环境都可用,指定@Profile 标识的bean,只有匹配的环境才可用,默认环境是“default”
修改环境标识的几种方法:
- 修改命令行参数
在虚拟机参数位置加载 -Dspring.profiles.active=test
- 使用代码的方式
// 1. 创建一个applicationContext
AnnotationConfigApplication applicationContext = new AnnotationConfigApplication();
// 2. 设置需要激活的环境
applicationContext .getEvironment().setActiveProfiles("test", "dev");
// 3. 注册配置类,启动容器刷新
@Profile 还可以写在类上,此时整个类在匹配的环境中才可以使用
- @import
@import 在spring4.2 以前只能导入配置类,新版本中则可以直接导入POJO,@import 还可以使用实现ImportSelector和ImportBeanDefinitionRegistrar接口的方式导入bean,详情参考博客