终于空了一会稍微看了下Spring的实现
发现Spring的几个annotation,@Autowired,@Required扩展的特别有意思,记录一下
首先要开启spring的Annotation的识别需要在xmlns中添加
xmlns:context="http://www.springframework.org/schema/context"
然后指定下该schema的位置
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
然后在beans中增加配置
<context:annotation-config/>
点开anotation-config可以看到这一串注释
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 may
choose 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
分享到:
相关推荐
理解并使用BeanPostProcessor可以极大地扩展Spring的功能,实现诸如AOP代理、属性注入增强、依赖检查等高级功能。 `BeanPostProcessor.drawio`文件可能是用Draw.io绘制的类图,详细展示了BeanPostProcessor接口与...
Java自定义注解和Spring的BeanPostProcessor是Java企业级开发中的两个重要概念,它们在构建灵活、可扩展的应用程序中发挥着关键作用。本文将深入探讨这两个话题,并结合源码分析,帮助开发者更好地理解和应用。 ...
com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean...
【Spring的BeanPostProcessor与工厂模式】 在Spring框架中,BeanPostProcessor(BPP)是一个强大的接口,它允许我们自定义bean的初始化和销毁过程。BPP是在bean实例化之后,但初始化之前以及销毁之前执行特定操作的...
BeanPostProcessor接口提供了两个核心方法,`postProcessBeforeInitialization()` 和 `postProcessAfterInitialization()`,它们分别在bean的初始化前后被调用,为扩展Spring的功能提供了极大的灵活性。 `...
这个压缩包提供的"spring扩展点测试示例代码"是一个实例,帮助我们理解如何在实践中利用Spring的扩展点进行自定义功能的实现。 首先,Spring的核心设计理念之一就是“依赖注入”(Dependency Injection,DI),它...
在使用Spring时,可以通过实现BeanFactoryPostProcessor和BeanPostProcessor接口来扩展容器的功能。例如,可以使用BeanFactoryPostProcessor接口来修改BeanDefinition的信息,或者使用BeanPostProcessor接口来修改...
总结,Spring框架通过BeanPostProcessor机制提供了强大的扩展性,使得开发者可以在bean生命周期的不同阶段插入自定义逻辑。@Value注解使得配置更加灵活,可以从属性文件中读取值并注入bean。而@Autowired则是Spring...
`spring-5.2.8.RELEASE-docs.zip`包含的是官方文档,是理解源码的重要辅助材料;而`spring-5.2.8.RELEASE-schema.zip`则包含了Spring的XML配置文件的XSD规范,这对于理解Spring的配置方式至关重要。 Spring框架的...
最近正在看spring官网,看Spring IOC的时候看Spring容器扩展点的时候发现了BeanPostProcessor 这个接口。下面是官方对它的详细描述: BeanPostProcessor接口定义了回调方法,您可以实现提供自己的(或覆盖容器的默认...
学习源码后,你可以根据需要自定义Spring的扩展,如编写新的BeanPostProcessor、AOP切面、或者定制化的Web MVC控制器。 7. **实践应用** 结合实际项目,将学到的知识应用于解决具体问题,比如优化数据访问策略、...
文档最后还涉及到了Spring容器的扩展点,如BeanPostProcessor和BeanFactoryPostProcessor,这些扩展点让开发者有机会在Spring容器实例化Bean前后以及加载配置元数据前后执行自定义逻辑。 整体来看,Spring4中文文档...
开发者可以自定义初始化和销毁方法,或者使用BeanPostProcessor接口进行扩展。 4. **DI(Dependency Injection)**: DI是IoC的一个具体实现,它通过容器将依赖关系注入到对象中,而不是由对象自己查找依赖。...
容器本身也具备了极高的扩展性,开发者可以通过实现BeanPostProcessor接口来扩展Bean的生命周期。例如,可以在Bean初始化前后进行自定义的处理逻辑,这为开发者提供了很大的灵活性。 DefaultListableBeanFactory和...
使用BeanPostProcessor自定义beanBeanPostProcessor接口定义了回调方法,您可以实现这些回调方法来提供您自己的(或覆盖容器的默认
Spring框架广泛运用了多种设计模式,如工厂模式(BeanFactory)、单例模式(Singleton)、代理模式(AOP代理)、装饰器模式(BeanPostProcessor)等,这些模式的运用使得Spring具有高度的灵活性和可扩展性。...
1. 容器扩展:Spring 提供了 BeanPostProcessor 和 BeanFactoryPostProcessor 接口,允许用户自定义扩展点,实现更精细的控制。 2. Annotation-based Configuration:除了 XML 配置外,4.3.6 版本更加强调注解驱动的...
5. `InstantiationAwareBeanPostProcessor`:进一步扩展了 `BeanPostProcessor`,可以在 Bean 实例化之前和之后进行操作。 通过阅读 Spring 源码,我们可以更好地理解其内部机制,从而优化代码、调试问题,甚至开发...
最后,Spring还提供了BeanPostProcessor接口,允许开发者提供自己的实例化逻辑,以及在调用初始化方法前后对Bean进行额外的处理。此外,Spring还支持Bean定义的继承,以及Bean作用域的设置,例如单例作用域和原型...