【Spring篇】二.springBean的生命周期及Aware接口

1. 生命周期

1.1 定义

	<bean id="student" class="com.wpj.bean.Student">bean>

1.2 初始化

spring容器在初始化的时候会创建一系列对象,同时将对象之间的依赖关系通过注入方式组织起来
	方式
		第一种: 实现org.springframework.beans.factory.InitializingBean接口,覆盖afterPropertiesSet方法
			会判断有没有实现这个接口,有的话会调用afterPropertiesSet方法
		第二种: 在xml中配置	init-method="bean中的方法"	(常用)
			当spring容器加载这个bean初始化的时候就会调用 init-metod中的方法
	<bean id="student" class="com.wpj.bean.Student" init-method="init" />
	public class Student{
		public void init(){
			//...
		}
    }

1.3 使用

实际开发中从bean中取出该实例,调用方法。
 	@Test
    public void showSpringBean(){
        // 通过当前相对路径加载spring容器
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
        // 根据id获取bean
        Student student = (Student) ac.getBean("student");
        System.out.println(student);
   	}

1.4 销毁

在spring容器停止的时候bean创建的所有实例
	方式
		第一种: 实现org.springframework.beans.factory.DisposableBean接口,覆盖destroy方法
			会判断有没有实现这个接口,有的话会调用destroy方法
		第二种: 在xml中配置	destroy-method="bean中的方法"
			当spring容器销毁该bean的时候就会调用 destroy-metod中的方法
	<bean id="student" class="com.wpj.bean.Student" destroy-method="init" />
	public class Student{
		public void destroy(){
			//...
		}
    }

1.5 配置全局默认初始化和销毁方法

在该容器创建的bean都会先调用init方法,销毁的时候吊笼destroy方法。(根据实际情况考虑是否使用)

<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd"
      default-init-method="init" default-destroy-method="destroy">

bean>
注: 当同时配置三种初始销毁方法
	实现接口的方法会优先于配置文件的方法且配置了接口的方法的话全局默认的不生效
	全局默认方式可以不实现接口不覆盖方法,运行无输出无报错

2. Aware

Spring中提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化之后,可以获取相应资源。
通过该接口,可以对spring相应资源进行操作(慎重)
	因为获取的资源很可能是spring容器中非常核心的内容。
为spring进行简单的扩展提供了方便的入口

 2.1 ApplicationContextAware
	向实现了这个接口的bean提供ApplicationContext的信息,该bean必须配到spring容器中并由spring容器去加载。

 2.1 BeanNameAware
	向实现了这个接口的bean提供BeanName的信息,该bean必须配到spring容器中并由spring容器去加载。
接口
ApplicationContextAware			上下文
ApplicationEventPublisherAware	事件发布
BeanClassLoaderAware			类加载器
BeanFatoryAware	
BeanNameAware
BootstrapContextAware
LoadTimeWeaverAware
MessageSourceAware
NotificationPublisherAware
PortletConfigAware
PortletContextAware
ResourceLoaderAware
ServletConfigAware
ServletContextAware

3. 案例 : ApplicationContextAware

3.1 定义类实现该接口
public class TestApplicationContextAware implements ApplicationContextAware{
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("applicationContext = " + applicationContext.getBean("testInter"));
        System.out.println("applicationContext = " + applicationContext.hashCode());
    }
}
3.2 在spring-aware.xml中
    <bean id="testApplicationContextAware" class="com.wpj.aware.TestApplicationContextAware">bean>
3.3 Test
public class AwareTest {
    @Test
    public void test(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring-aware.xml");
    }
}

目前暂不理解及体会该接口 所以简单演示。。。后续待补充。。。。。

你可能感兴趣的:(学习)