携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情
Bean 的⽣命周期了解么? 下⾯的内容整理⾃:yemengying.com/2016/07/14/… -cycle/ ,除了这篇⽂章,再推荐⼀篇很不错的⽂章 :www.cnblog s.com/zrtqsk/p/3735273.html 。
Bean 容器找到配置⽂件中 Spring Bean 的定义。
Bean 容器利⽤ Java Reflection API 创建⼀个 Bean 的实例。
如果涉及到⼀些属性值 利⽤ set() ⽅法设置⼀些属性值。
如果 Bean 实现了 BeanNameAware 接⼝,调⽤ setBeanName() ⽅法,传⼊ Bean 的名字。
如果 Bean 实现了 BeanClassLoaderAware 接⼝,调⽤ setBeanClassLoader() ⽅法,传⼊ ClassLoader 对象的实例。
如果 Bean 实现了 BeanFactoryAware 接⼝,调⽤ setBeanFactory() ⽅法,传 ⼊ BeanFactory 对象的实例。 与上⾯的类似,如果实现了其他 *.Aware 接⼝,就调⽤相应的⽅法。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执 ⾏ postProcessBeforeInitialization() ⽅法
如果 Bean 实现了 InitializingBean 接⼝,执⾏ afterPropertiesSet() ⽅法。
如果 Bean 在配置⽂件中的定义包含 init-method 属性,执⾏指定的⽅法。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执⾏ postProcessAfterInitialization() ⽅法
当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接⼝,执⾏ destroy() ⽅法。
当要销毁 Bean 的时候,如果 Bean 在配置⽂件中的定义包含 destroymethod 属性,执⾏指定的⽅法。
Spring AoP
谈谈⾃⼰对于 AOP 的了解
AOP(Aspect-Oriented Programming:⾯向切⾯编程)能够将那些与业务⽆关, 却为业务模块所共同调⽤的逻辑或责任(例如事务处理、⽇志管理、权限控制 等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未 来的可拓展性和可维护性。
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接⼝,那 么 Spring AOP 会使⽤ JDK Proxy,去创建代理对象,⽽对于没有实现接⼝的 对象,就⽆法使⽤ JDK Proxy 去进⾏代理了,这时候 Spring AOP 会使⽤ Cglib ⽣成⼀个被代理对象的⼦类来作为代理
Spring AOP 和 AspectJ AOP 有什么区别? Spring AOP 属于运⾏时增强,⽽ AspectJ 是编译时增强。 Spring AOP 基于 代理(Proxying),⽽ AspectJ 基于字节码操作(Bytecode Manipulation)。