spring IOC中主要的scope有两种,分别是singleton(单例)和prototype(原型)
1.当scope设为singleton(默认即为singleton)时,取出的对象始终为一个。
测试代码:
<?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="userDAO" class="com.jack.dao.impl.UserDAOImpl">
<property name="daoid" value="1"></property>
</bean>
<bean id="userService" class="com.jack.service.UserService" scope="singleton">
<property name="userDAO" ref="userDAO"></property>
</bean>
</beans>
package com.jack.service;
import com.jack.dao.UserDAO;
import com.jack.dao.impl.UserDAOImpl;
import com.jack.model.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserServiceTest {
@Test
public void add() throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserService userService = (UserService) ctx.getBean("userService");
UserService userService1 = (UserService) ctx.getBean("userService");
System.out.println(userService == userService1);
}
}
2.当scope设为prototype时, 每次都会取出一个新的对象。当所取出的对象中含有一个全局变量的时候,而在第二次使用的时候希望使用初始的全局变量,这时候可以使用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="userDAO" class="com.jack.dao.impl.UserDAOImpl">
<property name="daoid" value="1"></property>
</bean>
<bean id="userService" class="com.jack.service.UserService" scope="prototype">
<property name="userDAO" ref="userDAO"></property>
</bean>
</beans>
package com.jack.service;
import com.jack.dao.UserDAO;
import com.jack.dao.impl.UserDAOImpl;
import com.jack.model.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserServiceTest {
@Test
public void add() throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserService userService = (UserService) ctx.getBean("userService");
UserService userService1 = (UserService) ctx.getBean("userService");
System.out.println(userService == userService1);
}
}