Test.java(测试类):
package cn.xxx.demo;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.xxx.bean.User;
public class Test {
@Test
//scope:singleton 单例
//scope:prototype 多例
public void fun1(){
//1 创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/b_create/applicationContext.xml");
//2 向容器"要"user对象
User u1 = (User) ac.getBean("user");
User u2 = (User) ac.getBean("user");
System.out.println(u1==u2);//单例:true 多例:false
}
@Test
//测试生命周期方法
public void fun2(){
//1 创建容器对象
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/b_create/applicationContext.xml");
//2 向容器"要"user对象
User u = (User) ac.getBean("user");
//3 打印user对象
System.out.println(u);
//强行关闭容器,触发销毁方法
ac.close();
}
}
src/applicationContext.xml(Spring配置文件,配置Bean元素):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<!-- scope:
singleton:单例(默认)。 对象在Spring容器中只会存在一个
prototype:多例。 对象会存在多个。(在获取该对象时才去创建,而不是在创建容器时创建;且创建的对象都是新对象)(整合Struts2时,ActionBean必须配置为多例)
request(了解):web环境下,该对象与request请求的生命周期相同(不常用)。
session(了解):web环境下,该对象与session的生命周期相同(不常用)。
生命周期属性:
init-method:初始化方法。对象创建之后,立即调用初始化方法。
destroy-method:销毁方法。Spring容器在关闭并销毁所有容器中的对象之前调用。
-->
<bean name="user" class="cn.xxx.bean.User"
scope="singleton"
init-method="init"
destroy-method="destroy" ></bean>
</beans>
User.java(Spring容器管理的Bean对象):
package cn.xxx.bean;
public class User {
public User() {
System.out.println("User对象空参构造方法!!!!");
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void init(){
System.out.println("我是初始化方法!");
}
public void destroy(){
System.out.println("我是销毁方法!");
}
}