Spring框架中重要的接口

1.InitializingBean接口

  • InitializingBean接口中只有一个方法afterPropertiesSet(),这个方法是在bean的属性都设置值后被调用,用于完成一些初始化工作。
  • 在spring的配置文件中init-method的配置、@PostConstruct注解 也是跟InitializingBean接口的afterPropertiesSet()方法同样作用
  • 三种方式的执行顺序:先注解,然后执行InitializingBean接口中定义的方法,最后执行init-method指定的方法。
  • 这三种方式都是在bean属性设置后做一下特殊处理,用于完成 一些初始化工作,所以在方法中不要编写复杂且执行时间很长的逻辑。

2.DisposableBean接口

  • DisposableBean接口中只有一个destory方法,该方法会在bean销毁,生命周期结束之前被调用,用于一些销毁的收尾工作。
  • 在spring的配置文件中destory-method方法,@PreDestory注解与DisposableBean接口的destory方法同样的作用
  • 三种方式的执行顺序,先注解,然后执行DisposableBean接口的destory方法,最后执行destory-method方法

3.ApplicationContextAware接口

  • ApplicationContextAware接口中只有一个setApplicationContext方法,实现了该接口的bean,可以在该bean的加载过程中获取spring的上下文ApplicationContext,通过ApplicationContext可以获取更多的spring容器内的信息。

4.BeanFactoryAware接口

  • BeanFactoryAware接口中只有一个setBeanFactory方法,实现了该接口的bean,可以在该bean的加载过程中获取加载该bean的beanFactory,从而可以获取该beanFactory中加载的其他bean。

5.FactoryBean接口

  • 当spring容器在中的bean实现了该接口后,通过getBean(String beanName)获取到的bean对象并不是FactoryBean实现类对象,而是这个实现类中getObject()方法返回的对象。
  • 要想获得FactoryBean实现类的对象,使用getBean(&beanName)
  • FactoryBean#getObject()方法所返回的对象,相当于FactoryBean#getObject()代理了getBean(beanName)方法,
  • spring中aop,使用ProxyFactoryBean方式实现,其中ProxyFactoryBean就实现了FactoryBean接口

6.BeanPostProcessor接口

  • BeanPostProcessor中有两个方法,postProcessBeforInitialization和postProcessAfterInitialization,会在spring中每个bean的初始化方法前后调用实现了该接口的类的这两个方法,添加一些自己的处理逻辑。
  • 初始化方法包括,实现了InitializingBean接口对应afterPropertiesSet、spring中配置的init-method方法、@PostConstruct注解的方法。
  • spring中大部分注解解析器大部分是通过实现BeanPostProcessor接口来实现的。

7.InstantiationAwareBeanPostProcessor接口

  • 有三个方法,postProcessBeforeInstantiation、postProcessAfterInstantiation、postProcessPropertyValues。
  • 会在每个bean实例化(即调用构造函数)之前、之后调用实现了该接口的类的postProcessBeforeInstantiation、postProcessAfterInstantiation方法
  • 典型用于替换bean的默认创建方式,例如aop通过扩展接口生成代理对应,主要用于基础框架层面;如果日常业务中需要扩展,推荐使用InstantiationAwarePostProcessorAdpater
  • 如果postProcessBeforeInstantiation返回bean(典型的aop返回proxy对象),则初始化流程缩短,只会执行BeanPostProcessor的postProcessAfterInitialization接口直接完成初始化;否则执行顺序postProcessBeforeInstantiation->构造方法->postProcessAfterInstantiation->postProcessBeforeInitialization->@PostConstruct->afterPropertiesSet->init-method->postProcessAfterInitialization
  • postProcessProperties调用时机为postProcessAfterInstantiation执行之后并返回true, 返回的PropertyValues将作用于给定bean属性赋值.

spring容器中的bean先实例化,而后设置属性,最后初始化;实例化是调用构造函数,初始化是调用初始化方法;

8.BeanFactoryPostProcessor接口

  • 只有postProcessBeanFactory一个方法
  • 实在该接口的类,可以在Bean被创建之前,获取容器中Bean的定义信息,并可以进行修改,实现类中的方法只会被执行一次,且先于BeanPostProcessor接口中的方法。

9.ApplicationListener接口

  • 只有onApplicationEvent一个方法(与ApplicationEvent一起构成观察者模式)
  • 实现该接口的类,在ApplicationContext发布ApplicationEvent时,回调onApplicationEvent方法
  • dubbo中的服务发布就是使用该接口发布服务的(Service.java)

转载于:https://my.oschina.net/u/198237/blog/3064155

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值