山东住房和城乡建设厅网站首页,全总基层组织建设网站,装修效果图免费软件,wordpress免费淘宝客主题SpringBean的创建过程的生命周期可以分为
通过构造方法创建普通对象对普通对象属性进行依赖注入#xff08;被Autowired注解修饰的变量#xff09;执行初始化前的操作#xff08;被PostConstruct注解修饰的方法#xff09;执行初始化操作#xff08;需要实现Initializing…SpringBean的创建过程的生命周期可以分为
通过构造方法创建普通对象对普通对象属性进行依赖注入被Autowired注解修饰的变量执行初始化前的操作被PostConstruct注解修饰的方法执行初始化操作需要实现InitializingBean接口重写afterPropertiesSet()方法初始化后操作AOP切面生成代理对象将代理对象或者普通对象有aop操作则放入代理对象否则放入普通对象放入单例池中Map
最终Bean就被创建完成可以被使用了
通过构造方法创建普通对象
spring创建普通对象的规则是
当只有一个构造方法时使用该构造方法创建普通对象没有构造器时默认使用无参构造方法来创建普通对象如果类中有多个构造方法spring默认优先使用无参构造来创建普通对象如果没有无参构造且构造方法有多个时使用被Autowired注解修饰的构造方法来创建普通对象如果没有被Autowired注解修饰的构造方法则报错。
代理对象与普通对象的关系
spring在生成代理对象后并没有再次进行依赖注入等操作那么代理对象是如何调用的注入的属性的呢
答案是spring在生成代理对象后又依赖了原先进行了依赖注入等操作的普通对象在进行完切面操作后再调用普通对象的方法这样就能使用注入的属性了基本代码为
class UserServiceProxy extends UserService {UserService target;public void test(){// Before切面逻辑target.test();}
}
也就是说如果一个类有aop切面相关的操作的话那么单例池Map中存放的是aop代理后的代理对象代理对象持有进行了依赖注入后的普通对象。