首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

Spring官方扩充的BeanPostProcessor

2012-12-20 
Spring官方扩展的BeanPostProcessor终于空了一会稍微看了下Spring的实现发现Spring的几个annotation,@Auto

Spring官方扩展的BeanPostProcessor

终于空了一会稍微看了下Spring的实现

发现Spring的几个annotation,@Autowired,@Required扩展的特别有意思,记录一下

首先要开启spring的Annotation的识别需要在xmlns中添加

Activates various annotations to be detected in bean classes: Spring's @Required and@Autowired, as well as JSR 250's @PostConstruct, @PreDestroy and @Resource (if available),JAX-WS's @WebServiceRef (if available), EJB3's @EJB (if available), and JPA's@PersistenceContext and @PersistenceUnit (if available). Alternatively, you maychoose to activate the individual BeanPostProcessors for those annotations.Note: This tag does not activate processing of Spring's @Transactional or EJB3's@TransactionAttribute annotation. Consider the use of the <tx:annotation-driven>tag for that purpose.

?也就是说增加注释后,spring不仅可以识别spring自身@Required,@Autowired,也可以识别JSR 250中的@PostConstruct,@PreDestroy,@Resource(spring会先尝试load这些annotation的class,如果没有引入jsr-250的jar则作罢)同理JAX-WS的@WebServiceRef, EJB3的@EJB和JPA的@PersistenceContext和PersistenceUnit等。

不过对于事务,就不是这个配置管辖的范围了,请用<tx:annotation-driven>

?

那么Spring在读到这行后具体会增加哪些BeanPostProcessor呢,观察下来有4个

1.CommonAnnotationBeanPostProcessor

2.RequiredAnnotationBeanPostProcessor

3.AutowiredAnnotationBeanPostProcessor

4.ConfigurationClassPostProcessor

其中1-3都是Spring2.5中增加的功能,4是Spring 3.0中新增的

我们逐个来看下

1.CommonAnnotationBeanPostProcessor

这个是处理JSR 250中的那些和DI相关的annotation的

2.RequiredAnnotataionBeanPost

处理@Required注解

3.AutowiredAnnotationBeanPostProcessor

处理@Autowired注解,还有javax.inject.Inject,及value

4.ConfigurationClassPostProcessor

这个是Spring3.0新加入的,用来处理非xml形式的,java方式的依赖

?

看到这里可能有点蛋蛋的忧伤,怎么Autowired出现了他的好基友@Qualifier没出现呢?

其实@Qualifier的注解如下

This annotation may be used on a field or parameter as a qualifier for

?candidate beans when autowiring. It may also be used to annotate other

?custom annotations that can then in turn be used as qualifiers.

他就没说他是@Autowired的啊,在beans中配置default-autowire="",他也能生效的。

?

至于Qualifier的的实现,参见QualifierAnnotationAutowireCandidateResolver

热点排行