Spring Bean 的注入可以使用xml配置或者使用注解的形式来完成,其中注解是现在开发的主流,本文就以注解的形式对Bean装配进行简单的总结。
1.注解的优势
注解和xml各有个的优势,xml可以清晰看出依赖的关系,但是bean过多导致配置过多,注解申明在代码,使其更加简单和简洁。
添加注解申明在xml文件,通常我们添加如下的代码:
此隐式注解重在申明AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,
RequiredAnnotationBeanPostProcessor.注册这4个 BeanPostProcessor的作用,系统能够识别相应的注解。
2.@Required
此注解拥有bean属性setter方法,设置之后表示此属性必须设置,如果没有则抛出BeanInitializationException异常
3.@Autowired
可以用于属性,方法,构造器为其装配bean.
属性上面:
1 |
|
setter方法
1 |
|
构造器:
1 |
|
a)同时也可以根据上下文将所有同类型的bean收集到集合,数组当中
1 |
|
还可以装配到map<String, Object>当中去,其中string为bean的名字
1 |
|
在Autowired接口中有且只有一个方法 required(),其默认为true.在注入找不到对应的Bean就会抛出BeanCreationException异常,如果设置@Autowired(required=false),当在当前容器找不到对应的bean也不会抛错。
@Autowired 还可以用来注入Spring提供的依赖的接口BeanFactory, ApplicationContext, Environment, ResourceLoader, ApplicationEventPublisher, and MessageSource,扩展接口ConfigurableApplicationContext or ResourcePatternResolver
注意
:@Autowired 是由BeanPostProcessor实现过来的,所有在BeanPostProcessor or BeanFactoryPostProcessor 这些中不能使用,使用会出现循环死。在这些类中可以通过xml配置实现注入或者使用Spring @Bean。
4.@Qualifier
当一个接口被多个类继续的时候,我们为借口自动注入值的时候就会出现BeanCreationException异常,因为存在多个Bean,spring并不难知道应该注入那个一个Bean,这个时候就可以使用@Qualifier注解,为其需要的注入对应的bean 名字
1 |
|
同样@Qualifier注解也可以用于方法和构造器上面:
1 |
|
a)在xml配置中为bean设置Qualifier 名字方法:
1 | <bean class="example.SimpleMovieCatalog"> |
b)自定义Qualifier
通过 文章查看自定义Qualifier的使用和效果
5.@Bean
@Bean 通常和@Configuration搭配一起使用,@Configuration等价于xml整体配置文件,@Bean 类似于为其中的bean
1 |
|
本类中分别配置了两个Bean,bean的id 默认是方法名称。
6.@Resource
Spring 同样支持JSR-250,可以使用@Resource为其字段和stter方法注入.
@Resource 注解方法在JSR250的包中,使用在使用的时候需要添加相应的jar包,maven依赖添加如下:
1 | <dependency> |
在setter方法中使用:
1 |
|
在属性上:
1 |
|
7.@PostConstruct 和 @PreDestroy
在JSR-250的标准中,@PostConstruct 用于Bean的初始化执行,@PreDestroy在bean销毁的时候执行。
8.@Inject
@Inject 属于java上下文依赖注入,所有在使用@Inject还需要一如另外jar包,maven配置如下:
1 | <dependency> |
在属性上使用:
1 |
|
当然@Inject也可以用在方法上面。