Spring 的设计中留给了我们大量的扩展接口供开发者去自定义自己的功能,其中AOP 就是在 Spring 预留的扩展接口中实现的,所以说只要遵守 Spring 对扩展接口的约定,那么就能实现自己想要的功能。那么我们具体来看一下都有哪些扩展接口。
1.FactoryBean(Aop就是通过这个接口来实现的),我们看一下这个接口里面的方法:
public interface FactoryBean<T> {
//返回对象实例
T getObject() throws Exception;
//对象的类型
Class<?> getObjectType();
//是否单例
default boolean isSingleton() {
return true;
}
}
主要通过getObject方法,实例化一些自定义类(比较复杂的),比如AOP功能,mybatis-spring里面也有使用。
2.InitializingBean:初始化数据的接口
这个接口里面有一个方法:afterPropertiesSet,从名称也能够看出,这个方法主要是在当前对象的属性设置完成以后调用的,可以在这里做一些初始化的工作。跟init-method配置的效果是一致的,不过执行顺序上早于init-method。
3.DisposableBean :消费bean的一些操作
这个接口也只有一个方法:destroy,这里主要是在销毁之前做一些自己的自定义操作。
4.BeanFactoryPostProcessor:获取BeanDefinition对象,然后修改对象的元数据
这个接口里面也是只有一个方法:postProcessBeanFactory,从名字可以看出,是在对象被创建之前做的操作,而且只会被执行一次, 这里主要是可以获取到所有在BeanFactory中的BeanDefinition對象 加以修改对象的元属性:例如scope
5.Aware接口
5.1BeanNameAware:获取当亲bean的name信息
void setBeanName(String name); 这里的name就是当前bean的name
5.2BeanFactoryAware:获取当前的bean工厂(BeanFactory),然後可以获取到当前工厂下的