1.在bean的Aware和初始化:
都是对象实现接口,然后spring对bean的判断是否实现接口,执行重写的方法;
1.接口的定义
//bean实现这个类,对类的接口进行判断
public interface BeanNameAware {
//方法参数名的回调
public void Aware( String name);
}
@Component("dao")
@Scope("prototype")
public class Dao implements InitializingBean {
@Override
public void initializingBean() {
System.out.println("初始化");
}
}
Spring源码的处理:
//实现bean的初始化
//判断这个bean对象是否是接口的子类
if(object instanceof InitializingBean){
((InitializingBean) object).initializingBean();
}
//BeanName的回调
if(object instanceof BeanNameAware){
}
return object;
beanPostProcessor(bean的后置处理器):
BeanPostProcessor是对于所有的bean进行在初始化进行操作的步骤(如果想对特殊的bean进行操作需要进行if()语句的判断):
在bean的后置处理器进行aop操作;
bean的创建过程:
接口的创建:
//bean的后置处理器
//对于所有的bean都会执行后置处理器
//想要个别的类实现。需要进行判断:
public interface BeanPostProcessor {
//初始化后的操作
public Object afterPostProcessor(Objiect bean ,String BeanName);
//还有初始化前的操作
public Objiec beforePostProcessor(Objiect bean , Stirng BeanName);
}
//bean的后置类
//@Component(组件)使用这个组件让spring发现这个主键
//bean也是spring的一个组件
@Component("beanPost")
public class BeanPost implements BeanPostProcessor {
//所有的bean在创建前都会执行这个方法
@Override
public Object afterPostProcessor() {
System.out.println("bean的初始化后");
return null;
}
}
Spring中扫描注解中的逻辑:
//判断这个class对象是否是BeanPostProcessor类的衍生子类
if(BeanPostProcessor.class.isAssignableFrom(aClass1)){
//创建一个Bean后置处理器的对象保存在List中
BeanPostProcessor beanPost = (BeanPostProcessor) aClass1.newInstance();
//存放在List的集合中
postProcessorArrayList.add(beanPost);
}
创建Bean的过程中,后置处理器对类的操作:
//类的后置处理器
//从list中遍历取出bean的后置处理器对象(可以创建多个bean的后置处理器)
for (BeanPostProcessor list:postProcessorArrayList) {
//可以执行AOP,执行bean后置处理器中自己定义的方法
list.afterPostProcessor();
}