spring-framework 源码一 :扩展点

LifecycleProcessor接口还定义了用于刷新和关闭上下文的回调方法。后者驱动关闭进程,就好像已经显式地调用了stop(),但它是在上下文关闭时发生的。另一方面,“refresh”回调启用了SmartLifecycle bean的另一个特性。当上下文被刷新时(在所有对象被实例化和初始化之后),该回调被调用。此时,默认的生命周期处理器将检查每个SmartLifecycle对象的isAutoStartup()方法返回的布尔值


为同一bean配置的多个生命周期机制,使用不同的初始化方法,调用如下:
1.用@PostConstruct注释的方法
2.由InitializingBean回调接口定义的afterPropertieSet()
3.自定义配置的init()方法
销毁方法的调用顺序相同:
1.用@PreDestroy注释的方法
2.destroy()由DisposableBean回调接口定义
3.自定义配置的destroy()方法
当ApplicationContext创建实现org.springframework.context.ApplicationContextAware接口的对象实例时,将为该实例提供对该ApplicationContext的引用。下面的列表显示了ApplicationContextAware接口的定义:

public interface ApplicationContextAware {

    void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
}


当ApplicationContext创建实现org.springframework.beans.factory.BeanNameAware接口的类时,将为该类提供对其关联对象定义中定义的名称的引用。下面的列表显示BeanNameAware接口的定义

public interface BeanNameAware {

    void setBeanName(String name) throws BeansException;
}


回调在正常bean属性填充之后调用,但在初始化回调(如initializengbean、afterPropertiesSet或自定义init方法)之前调用。


除了ApplicationContextAware和BeanNameAware(前面已经讨论过),Spring还提供了一系列感知回调接口,让bean向容器指示它们需要某种基础结构依赖性。一般来说,名称表示依赖项类型。下表总结了最重要的感知接口

再次注意,使用这些接口将您的代码绑定到Spring API,并且不遵循控制反转样式。因此,我们建议将它们用于需要对容器进行编程访问的基础设施bean。

BeanPostProcessor 

BeanPostProcessor接口定义回调方法,您可以实现这些方法来提供自己的(或重写容器的默认)实例化逻辑、依赖关系解析逻辑等。如果要在Spring容器完成bean的实例化、配置和初始化之后实现一些自定义逻辑,可以插入一个或多个自定义BeanPostProcessor实现。

可以通过设置order属性来控制这些BeanPostProcessor实例的执行顺序。只有在BeanPostProcessor实现有序接口时才能设置此属性。

package scripting;

import org.springframework.beans.factory.config.BeanPostProcessor;

public class InstantiationTracingBeanPostProcessor implements BeanPostProcessor {

    // simply return the instantiated bean as-is
    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        return bean; // we could potentially return any object reference here...
    }

    public Object postProcessAfterInitialization(Object bean, String beanName) {
        System.out.println("Bean '" + beanName + "' created : " + bean.toString());
        return bean;
    }
}

beanfactorypostprocessor

我们查看的下一个扩展点是org.springframe .bean .factory.config. beanfactorypostprocessor。此接口的语义与BeanPostProcessor的语义相似,但有一个主要区别:BeanFactoryPostProcessor操作bean配置元数据。也就是说,Spring IoC容器允许BeanFactoryPostProcessor读取配置元数据,并可能在容器实例化除BeanFactoryPostProcessor实例之外的任何bean之前更改它

可以通过设置order属性来控制这些BeanFactoryPostProcessor实例的运行顺序。但是,只有在BeanFactoryPostProcessor实现有序接口时才能设置此属性。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值