首先创建一个UserInfo类,然后在application.xml中添加该类:
package club.affengkuang.vo;
public class UserInfo {
public UserInfo() {
System.out.println("构造方法");
}
}
<?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="userInfo" class="club.affengkuang.vo.UserInfo" lazy-init="true"></bean>
</beans>
这时我们在测试类中创建一个UserInfo类的IOC容器并从中获取两次对象,并分别打印他们的值,会发现两次获取的对象是同一个对象:
package club.affengkuang.test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
Object object = applicationContext.getBean("userInfo");
System.out.println(object);
object = applicationContext.getBean("userInfo");
System.out.println(object);
applicationContext.close();
}
}
这就是scope在作用,scope有四个值:
prototype:在容器中每次都可以创建一个新对象
singleton:容器中只能创建一个对象
session:同一个session里只创建一个对象
request:同一个request里只创建一个对象
其中后两个是在Javaweb项目中使用的,而scope的默认值也就是singleton,所以例子中在IOC容器中两次获取对象获取到的是同一个对象。
这时我们将scope的值修改为prototype再执行测试类中代码,便创建了两个不同的对象了:
<?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="userInfo" class="club.affengkuang.vo.UserInfo" lazy-init="true" scope="prototype"></bean>
</beans>