`
zys0523
  • 浏览: 31821 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring官方扩展的BeanPostProcessor

 
阅读更多

终于空了一会稍微看了下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

分享到:
评论

相关推荐

    Spring 内置 BeanPostProcessor类图.zip

    理解并使用BeanPostProcessor可以极大地扩展Spring的功能,实现诸如AOP代理、属性注入增强、依赖检查等高级功能。 `BeanPostProcessor.drawio`文件可能是用Draw.io绘制的类图,详细展示了BeanPostProcessor接口与...

    Java自定义注解与spring BeanPostProcessor详解

    Java自定义注解和Spring的BeanPostProcessor是Java企业级开发中的两个重要概念,它们在构建灵活、可扩展的应用程序中发挥着关键作用。本文将深入探讨这两个话题,并结合源码分析,帮助开发者更好地理解和应用。 ...

    com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean,BeanDefinitionRegistryPostProcessor,BeanFactoryPostProcessor,BeanPostProcessor,ResourceLoaderA

    com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean...

    详解使用Spring的BeanPostProcessor优雅的实现工厂模式

    【Spring的BeanPostProcessor与工厂模式】 在Spring框架中,BeanPostProcessor(BPP)是一个强大的接口,它允许我们自定义bean的初始化和销毁过程。BPP是在bean实例化之后,但初始化之前以及销毁之前执行特定操作的...

    解析Java的Spring框架的BeanPostProcessor发布处理器

    BeanPostProcessor接口提供了两个核心方法,`postProcessBeforeInitialization()` 和 `postProcessAfterInitialization()`,它们分别在bean的初始化前后被调用,为扩展Spring的功能提供了极大的灵活性。 `...

    spring扩展点测试示例代码

    这个压缩包提供的"spring扩展点测试示例代码"是一个实例,帮助我们理解如何在实践中利用Spring的扩展点进行自定义功能的实现。 首先,Spring的核心设计理念之一就是“依赖注入”(Dependency Injection,DI),它...

    Spring容器扩展机制的实现原理

    在使用Spring时,可以通过实现BeanFactoryPostProcessor和BeanPostProcessor接口来扩展容器的功能。例如,可以使用BeanFactoryPostProcessor接口来修改BeanDefinition的信息,或者使用BeanPostProcessor接口来修改...

    Spring笔记(第四次)1

    总结,Spring框架通过BeanPostProcessor机制提供了强大的扩展性,使得开发者可以在bean生命周期的不同阶段插入自定义逻辑。@Value注解使得配置更加灵活,可以从属性文件中读取值并注入bean。而@Autowired则是Spring...

    官方原版源码 spring-5.2.8.RELEASE.zip

    `spring-5.2.8.RELEASE-docs.zip`包含的是官方文档,是理解源码的重要辅助材料;而`spring-5.2.8.RELEASE-schema.zip`则包含了Spring的XML配置文件的XSD规范,这对于理解Spring的配置方式至关重要。 Spring框架的...

    Spring Annotaion Support详细介绍及简单实例

    最近正在看spring官网,看Spring IOC的时候看Spring容器扩展点的时候发现了BeanPostProcessor 这个接口。下面是官方对它的详细描述:  BeanPostProcessor接口定义了回调方法,您可以实现提供自己的(或覆盖容器的默认...

    构建为eclipse项目的spring源码

    学习源码后,你可以根据需要自定义Spring的扩展,如编写新的BeanPostProcessor、AOP切面、或者定制化的Web MVC控制器。 7. **实践应用** 结合实际项目,将学到的知识应用于解决具体问题,比如优化数据访问策略、...

    Spring4中文文档

    文档最后还涉及到了Spring容器的扩展点,如BeanPostProcessor和BeanFactoryPostProcessor,这些扩展点让开发者有机会在Spring容器实例化Bean前后以及加载配置元数据前后执行自定义逻辑。 整体来看,Spring4中文文档...

    SPRING技术内幕:深入解析SPRING架构与设计原理_spring_

    开发者可以自定义初始化和销毁方法,或者使用BeanPostProcessor接口进行扩展。 4. **DI(Dependency Injection)**: DI是IoC的一个具体实现,它通过容器将依赖关系注入到对象中,而不是由对象自己查找依赖。...

    Spring.pdf

    容器本身也具备了极高的扩展性,开发者可以通过实现BeanPostProcessor接口来扩展Bean的生命周期。例如,可以在Bean初始化前后进行自定义的处理逻辑,这为开发者提供了很大的灵活性。 DefaultListableBeanFactory和...

    fredomli#java-standard#Spring容器扩展1

    使用BeanPostProcessor自定义beanBeanPostProcessor接口定义了回调方法,您可以实现这些回调方法来提供您自己的(或覆盖容器的默认

    spring架构详解 spring架构详解

    Spring框架广泛运用了多种设计模式,如工厂模式(BeanFactory)、单例模式(Singleton)、代理模式(AOP代理)、装饰器模式(BeanPostProcessor)等,这些模式的运用使得Spring具有高度的灵活性和可扩展性。...

    spring-framework-4.3.6 API

    1. 容器扩展:Spring 提供了 BeanPostProcessor 和 BeanFactoryPostProcessor 接口,允许用户自定义扩展点,实现更精细的控制。 2. Annotation-based Configuration:除了 XML 配置外,4.3.6 版本更加强调注解驱动的...

    spring ioc

    5. `InstantiationAwareBeanPostProcessor`:进一步扩展了 `BeanPostProcessor`,可以在 Bean 实例化之前和之后进行操作。 通过阅读 Spring 源码,我们可以更好地理解其内部机制,从而优化代码、调试问题,甚至开发...

    Java Spring入门简介

    最后,Spring还提供了BeanPostProcessor接口,允许开发者提供自己的实例化逻辑,以及在调用初始化方法前后对Bean进行额外的处理。此外,Spring还支持Bean定义的继承,以及Bean作用域的设置,例如单例作用域和原型...

Global site tag (gtag.js) - Google Analytics