Spring中Bean的生命周期
2015-11-29 13:31
519 查看
#准备工作
最近刚开始看韩顺平老师讲的Spring基础,感觉听起来还是感觉比较好,也就教程中的案例做了实践,接下来记录一下,Spring中Bean的生命周期。
Spring的下载地址(我使用的是3.2.4):http://repo.springsource.org/libs-release-local/org/springframework/spring/
①创建工程
首先,用IDE创建一个Java工程,在工程目录下创建lib目录,复制需要引用的jar包并添加到ClassPath,因为我用的是Intellij,可能操作上与Eclipse有些不同。
②添加项目依赖Jar包
这个版本和教程中讲的2.5.5也有差异,主要是下载来的jar包中没有一个完整的包可以引用,只有一个个分开的jar包,这就使没有接触过Spring的我有些迷茫,
因为包很多,不知道哪些需要哪些不需要,查了一下资料,说是引用spring-core-3.2.4.RELEASE和spring-beans-3.2.4.RELEASE就够了,但是经过实践,还
需要引入spring-context-3.2.4.RELEASE、spring-expression-3.2.4.RELEASE和写日志的包commons-logging-1.1.1(需要单独下载)。
结论(需要引用的Jar包):
spring-core-3.2.4.RELEASE | spring-beans-3.2.4.RELEASE | spring-context-3.2.4.RELEASE | spring-expression-3.2.4.RELEASE | commons-logging-1.1.1
③创建applicationContext.xml文件
到这一步又开始迷茫了,搜索一下找到复制过来,Intellij检查到没有使用的引用都是灰色的,所以就删除了未使用的,结果为:
④创建类文件
User.java
Work.java
BeanProcessor.java
UserTest.java
applicationContext.xml
⑤测试结果:
①Constructor -> invoked
①setName -> invoked
①user
①org.springframework.beans.factory.support.DefaultListableBeanFactory@3fcd000a: defining beans [user,work,beanProcessor]; root of factory hierarchy
②Constructor -> invoked
②setName -> invoked
②work
②org.springframework.beans.factory.support.DefaultListableBeanFactory@3fcd000a: defining beans [user,work,beanProcessor]; root of factory hierarchy
②org.springframework.context.support.ClassPathXmlApplicationContext@7c4633e7: startup date [Sun Nov 29 13:26:05 CST 2015]; root of context hierarchy
postProcessBeforeInitialization -> invoked
②afterPropertiesSet
postProcessAfterInitialization -> invoked
②android开发:三年
①org.springframework.context.support.ClassPathXmlApplicationContext@7c4633e7: startup date [Sun Nov 29 13:26:05 CST 2015]; root of context hierarchy
postProcessBeforeInitialization -> invoked
①afterPropertiesSet -> invoked
①initBean -> invoked
postProcessAfterInitialization -> invoked
①祁连山
最近刚开始看韩顺平老师讲的Spring基础,感觉听起来还是感觉比较好,也就教程中的案例做了实践,接下来记录一下,Spring中Bean的生命周期。
Spring的下载地址(我使用的是3.2.4):http://repo.springsource.org/libs-release-local/org/springframework/spring/
①创建工程
首先,用IDE创建一个Java工程,在工程目录下创建lib目录,复制需要引用的jar包并添加到ClassPath,因为我用的是Intellij,可能操作上与Eclipse有些不同。
②添加项目依赖Jar包
这个版本和教程中讲的2.5.5也有差异,主要是下载来的jar包中没有一个完整的包可以引用,只有一个个分开的jar包,这就使没有接触过Spring的我有些迷茫,
因为包很多,不知道哪些需要哪些不需要,查了一下资料,说是引用spring-core-3.2.4.RELEASE和spring-beans-3.2.4.RELEASE就够了,但是经过实践,还
需要引入spring-context-3.2.4.RELEASE、spring-expression-3.2.4.RELEASE和写日志的包commons-logging-1.1.1(需要单独下载)。
结论(需要引用的Jar包):
spring-core-3.2.4.RELEASE | spring-beans-3.2.4.RELEASE | spring-context-3.2.4.RELEASE | spring-expression-3.2.4.RELEASE | commons-logging-1.1.1
③创建applicationContext.xml文件
到这一步又开始迷茫了,搜索一下找到复制过来,Intellij检查到没有使用的引用都是灰色的,所以就删除了未使用的,结果为:
<?xml version="1.0" encoding="utf-8"?> <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"> </beans>
④创建类文件
User.java
package com.spring.pojo; import org.springframework.beans.BeansException; import org.springframework.beans.factory.*; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class User implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean, DisposableBean { private String name; // private String gender; // private Work service; public User() { System.out.println("①Constructor -> invoked"); } public User(String name) {// , String gender, Work service) { this.name = name; // this.gender = gender; // this.service = service; } public String getName() { return name; } public void setName(String name) { System.out.println("①setName -> invoked"); this.name = name; } /** public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Work getService() { return service; } public void setService(Work service) { this.service = service; } */ /** * init-method */ public void initBean() { System.out.println("①initBean -> invoked"); } public void show() { System.out.println("①" + this.name); // + ":" + this.gender + "\r\n" + service.getStatus()); } @Override public void setBeanName(String s) { System.out.println("①" + s); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { System.out.println("①" + applicationContext); } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { System.out.println("①" + beanFactory); Work workService = (Work) beanFactory.getBean("work"); String status = workService.getStatus(); System.out.println("②" + status); } @Override public void afterPropertiesSet() throws Exception { System.out.println("①afterPropertiesSet -> invoked"); } @Override public void destroy() throws Exception { System.out.println("①DisposableBean's destroy -> invoked"); } public void beforeDestroy() { System.out.println("①beforeDestroy -> invoked"); } }
Work.java
package com.spring.pojo; import org.springframework.beans.BeansException; import org.springframework.beans.factory.*; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class Work implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean, DisposableBean { public String name; public String age; public Work() { System.out.println("②Constructor -> invoked"); } public Work(String name, String age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { System.out.println("②setName -> invoked"); this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getStatus() { return this.name + ":" + this.age; } public void initMethod() { System.out.println("②initMethod -> invoked"); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { System.out.println("②" + applicationContext); } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { System.out.println("②" + beanFactory); } @Override public void setBeanName(String s) { System.out.println("②" + s); } @Override public void destroy() throws Exception { System.out.println("②destroy -> invoked"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("②afterPropertiesSet"); } public void destroyMethod() { System.out.println("②destroyMethod -> invoked"); } }
BeanProcessor.java
package com.spring.pojo; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; public class BeanProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object o, String s) throws BeansException { System.out.println("postProcessBeforeInitialization -> invoked"); return o; } @Override public Object postProcessAfterInitialization(Object o, String s) throws BeansException { System.out.println("postProcessAfterInitialization -> invoked"); return o; } }
UserTest.java
package com.spring.pojo; import com.spring.pojo.User; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class UserTest { public static void main(String[] args) { AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); User service = (User) context.getBean("user"); service.show(); } }
applicationContext.xml
<?xml version="1.0" encoding="utf-8"?> <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"> <bean id="user" class="com.spring.pojo.User" scope="prototype" init-method="initBean" destroy-method="beforeDestroy"> <property name="name" value="祁连山"/> <!-- <property name="gender" value="男"/> <property name="service" ref="workService"/> --> </bean> <bean id="work" class="com.spring.pojo.Work" scope="prototype"> <property name="name" value="android开发"/> <property name="age" value="三年"/> </bean> <bean id="beanProcessor" class="com.spring.pojo.BeanProcessor"/> </beans>
⑤测试结果:
①Constructor -> invoked
①setName -> invoked
①user
①org.springframework.beans.factory.support.DefaultListableBeanFactory@3fcd000a: defining beans [user,work,beanProcessor]; root of factory hierarchy
②Constructor -> invoked
②setName -> invoked
②work
②org.springframework.beans.factory.support.DefaultListableBeanFactory@3fcd000a: defining beans [user,work,beanProcessor]; root of factory hierarchy
②org.springframework.context.support.ClassPathXmlApplicationContext@7c4633e7: startup date [Sun Nov 29 13:26:05 CST 2015]; root of context hierarchy
postProcessBeforeInitialization -> invoked
②afterPropertiesSet
postProcessAfterInitialization -> invoked
②android开发:三年
①org.springframework.context.support.ClassPathXmlApplicationContext@7c4633e7: startup date [Sun Nov 29 13:26:05 CST 2015]; root of context hierarchy
postProcessBeforeInitialization -> invoked
①afterPropertiesSet -> invoked
①initBean -> invoked
postProcessAfterInitialization -> invoked
①祁连山
相关文章推荐
- Java - 认识 JDBC
- 1.交通聚类:编辑距离 (Levenshtein距离)Java实现
- java中的堆、栈和常量池
- cassandra client in Java——cassandra总结(五)
- 安装TestNG在eclipse中的插件
- Java集合概述
- Java中的多态(polymorphism)和动态绑定(dynamic binding)
- Java-泛型
- java继承深入解析
- Java-文件操作与随机访问文件
- 将Android studio 项目导入eclipse的学习过程
- Java 字节流
- Java 集合框架
- Java进阶之路
- Java- Hibernate 多对一关系映射
- acm2028
- Java-Hibernate - EJB 注解映射
- Java- Hibernate 简介
- java 浅析I/O模型
- Java- Hibernate 多对多关系映射