(转载)Spring Bean生命周期,实例化顺序

简介

Spring中Bean容器的生命周期。

首先明确一点,并非Spring容器中所有的Bean都有生命周期行为,只有接受容器管理生命周期的Bean才具有生命周期行为;而单例(Singleton)Bean接受容器管理,非单例(non-singleton)Bean在实例化后,完全交给了客户端代码管理,容器不再跟踪其生命周期,每次客户请求,容器都会创建一个新的实例,所以Spring容易无法知晓Bean何时销毁。
Bean容器的生命周期。其实上图有个节点没有画出,就是在实例化所有Bean之前会执行BeanFactoryPostProcessors

Spring四种注入方式(IOC)

Set方式

1
2
3
4
5
6
7
8
9
10
11
12
13
public class SpringAction1 {
// 注入对象springDao
private SpringDao springDao;

// 一定要写被注入对象的set方法
public void setSpringDao(SpringDao springDao) {
this.springDao = springDao;
}

public void ok() {
springDao.ok();
}
}
1
2
3
4
5
6
7
package test.spring1;

public class SpringDao {
public void ok() {
System.out.println("Spring dao");
}
}
1
2
3
4
5
<bean name="springAction" class="test.spring1.SpringAction1">  
<!-- 依赖注入,配置当前类中相应的属性 -->
<property name="springDao" ref="springDao"></property>
</bean>
<bean name="springDao" class="test.spring1.SpringDao"></bean>
1
2
SpringAction1 springAction1 = (SpringAction1) ContextUtil.getBean("springAction", SpringAction1.class);
springAction1.ok();

清理Spring内省对象

问题

在服务器运行过程中,Spring不停的运行计划任务和OpenSessionInViewFilter,使得Tomcat反复加载对象而产生框架并用时可能产生的内存泄漏,则使用IntrospectorCleanupListener作为相应的解决办法。

解决方式

Spring中的提供一个名为org.springframework.web.util.IntrospectorCleanupListener的监听器。它主要负责处理由JavaBeans Introspector(内省对象)的使用而引起的内存泄露。

(转载)AOP知识

基础知识

AOP的3个实现层面

AOP就是面向切面编程,可以从3个层面来实现AOP

  1. 编译期:修改源代码。
  2. 字节码加载前:修改字节码。
  3. 字节码加载后:动态创建代理类的字节码。

    AOP的3个实现层面

    实现机制比较

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×