标签:spring
1.bean的生存范围:
(1)Singleton:默认,单例
(2)Prototype:原型,非单例
(3)Request:在一次http请求中,容器会返回该bean的同一个实例,对于不同的请求,返回不同的实例。
(4)Session:请求的作用域变为session
(5)Gloabsession:全局session
request,session主要用于web之中
我们这次主要探讨singleton和prototype这2个生存范围
<span style="color:#FF0000;">如果scope为singleton,二者相等,如果scope为prototype,二者不相等。</span>
实例代码
public class User { }配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean name="user" class="com.qzp.model.User" scope="prototype"></bean> </beans>测试代码
public class TestScope { public static void main(String[] args) { ApplicationContext cxt=new ClassPathXmlApplicationContext("applicationContext.xml"); User u1=(User)cxt.getBean("user"); User u2=(User)cxt.getBean("user"); System.out.println(u1.hashCode()); System.out.println(u2.hashCode()); <span style="color:#FF0000;">//如果scope为singleton,二者相等,如果scope为prototype,二者不相等。</span> System.out.println(u1==u2); } }
(1)lazy-init:懒加载,如果为true,该bean会延时加载,如果为false,该bean会立刻加载,默认为true
(2)init-method:初始化方法
<bean name="user" class="com.qzp.model.User" lazy-init="true" init-method="init" destroy-method="destroy" depends-on="student"></bean>其中init-method="init" init为类user中的init方法
(3)destory-method:销毁方法
(4)depends-on:某个bean的初始化依赖于另外一个bean的初始化
实例代码:
public class User { private String userName; private String password; public User() { super(); System.out.println("User的构造方法...."); } public void init() { System.out.println("User的初始化方法..."); } public void destroy() { System.out.println("User的销毁方法..."); } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
public class Student { private String name; private int age; public Student() { super(); System.out.println("student的构造方法..."); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean name="user" class="com.qzp.model.User" lazy-init="true" init-method="init" destroy-method="destroy" depends-on="student"></bean> <bean name="student" class="com.qzp.model.Student"></bean> </beans>
public class TestLifeCycle{ public static void main(String[] args) { AbstractApplicationContext cxt=new ClassPathXmlApplicationContext("applicationContext.xml"); <span style="color:#FF0000;">//如果为懒加载,执行下面的代码时,才会执行到该类的构造方法。</span> cxt.getBean("user"); cxt.close(); } }
student的构造方法...
User的构造方法....
User的初始化方法...
User的销毁方法...
标签:spring
原文地址:http://blog.csdn.net/qzp1991/article/details/43899767