spring bean初始化和销毁方法
来源:互联网 发布:小米平板网络助手 编辑:程序博客网 时间:2024/06/06 01:15
在spring中一个bean生命周期大概如下 :
- 定义 : 在xml中定义
- 初始化 : 容器初始化的时候初始化bean
- 使用 : 程序从容器中取出来用
- 销毁 : 容器销毁的时候
bean 的完整生命周期是要复杂得多的,后边搞懂了专门来写这个。这里记录怎么定义bean的初始化和销毁方法。实现方法有三种:实现接口、xml配置和注解。
现在有一个BeanTest 类(没有初始化销毁方法) :
package com.spring.beans;public class BeanTest { public void method() { System.out.print("bean 方法执行"); }}
配置xml :
<?xml version="1.0" encoding="UTF-8"?><!--spring 配置文件 --><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-3.0.xsd"> <bean id="beanTest" class="com.spring.beans.BeanTest"></bean></beans>
测试类 :
package com.spring.test;import com.spring.beans.BeanTest;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainTest { @Test public void Test() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); BeanTest test = (BeanTest) context.getBean("beanTest"); test.method(); context.close(); }}
测试输出结果 :
bean 方法执行
下面配置初始化销毁方法 :
实现接口的方式
实现InitializingBean(初始化)、DisposableBean(销毁)接口
package com.spring.beans;import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.InitializingBean;public class BeanTest implements InitializingBean ,DisposableBean{ @Override public void afterPropertiesSet() throws Exception { System.out.println("bean 初始化"); } @Override public void destroy() throws Exception { System.out.println("bean 销毁"); } public void method() { System.out.println("bean 方法执行"); }}
测试结果 :
bean 初始化bean 方法执行bean 销毁
xml配置的方式
每个bean单独配置初始化销毁方法
将BeanTest修改如下 :
package com.spring.beans;public class BeanTest { public void init() { System.out.println("bean 初始化"); } public void destroy() { System.out.println("bean 销毁"); } public void method() { System.out.println("bean 方法执行"); }}
修改xml :
<bean id="beanTest" class="com.spring.beans.BeanTest" init-method="init" destroy-method="destroy"/>
测试 :
bean 初始化bean 方法执行bean 销毁
配置全局的初始化销毁方法
<?xml version="1.0" encoding="UTF-8"?><!--spring 配置文件 --><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-3.0.xsd" default-init-method="init" default-destroy-method="destroy"> <!--配置全局初始化销毁方法--> <bean id="beanTest" class="com.spring.beans.BeanTest" /> </beans>
测试输出 :
bean 初始化bean 方法执行bean 销毁
注解配置初始化和销毁方法
使用注解实现bean的初始化和销毁方法,需要导入aop的jar包:导入之后的包有 :
- spring-beans-4.0.5.RELEASE.jar
- spring-aop-4.0.5.RELEASE.jar
- spring-context-4.0.5.RELEASE.jar
- spring-core-4.0.5.RELEASE.jar
- spring-expression-4.0.5.RELEASE.jar
- commons-logging-1.0.4.jar
- junit-4.10.jar
需要修改xml文件,使工程支持注解
<?xml version="1.0" encoding="UTF-8"?><!--增加了context --><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--支持注解的包--> <context:component-scan base-package="com.spring.beans"/> <bean id="beanTest" class="com.spring.beans.BeanTest" /> </beans>
使用注解修改BeanTest :
package com.spring.beans;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;public class BeanTest { //初始化方法 @PostConstruct public void init() { System.out.println("bean 初始化"); } //销毁方法 @PreDestroy public void destroy() { System.out.println("bean 销毁"); } public void method() { System.out.println("bean 方法执行"); }}
测试结果 :
bean 初始化bean 方法执行bean 销毁
几种方式的比较
优先级
为了测试这几种方式的优先级,我将所有的方式全部用上(标注不同方法),得到的输出如下 :
注解初始化接口初始化xml初始化bean 方法执行注解销毁接口销毁xml销毁
全局默认的初始化销毁没有执行。可以得出以下结论:
1.全局初始化销毁方法在有其他方式的情况下是不起作用的
2.优先级 : 注解 > 接口 > xml 单个配置 > 全局xml配置
耦合
出于解耦的考虑,不推荐接口的方式。
- spring bean初始化和销毁方法
- Spring bean初始化和销毁方法
- Spring中bean初始化时机初始化方法和销毁方法
- spring初始化和销毁bean
- spring bean初始化和销毁
- Spring——Bean的初始化方法和销毁方法
- Spring bean的初始化和销毁
- Spring Bean的初始化和销毁
- Spring中初始化bean和销毁bean的时候执行某个方法的详解
- Spring中初始化bean和销毁bean的时候执行某个方法的详解
- Spring中初始化bean和销毁bean的时候执行某个方法的详解
- Spring中初始化bean和销毁bean的时候执行某个方法的详解
- Spring bean初始化和销毁/bean作用域
- Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
- Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
- Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
- Spring容器中定义Bean几种初始化方法和销毁方法
- Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
- vscode + cygwin gdb 调试C/C++ 配置
- [2]Core Dump调试应用程序
- Elasticsearch上手——几个基本概念
- Android应用瘦身
- 2.4-整型变量-溢出与整数相除
- spring bean初始化和销毁方法
- [3]Linux应用程序地址布局
- MySQLworkbench的使用
- 从源码到可执行程序
- Codeforces Round #289 (Div. 2, ACM ICPC Rules)E. Pretty Song(数学,想法题,好题)
- URL编码与二次encodeURI
- 大一下自我学习规划
- js DOM篇
- Out of Memory