Al crear una instancia a través de la etiqueta Bean en el contenedor Spring, también puede especificar el alcance del Bean y establecerlo con scope = "".
abarcar | Función descriptiva |
---|---|
único | El alcance predeterminado en Spring es un modo singleton, y solo habrá una instancia de definición de bean en el contenedor IOC |
prototipo | En muchos casos, cada vez que se llama al método getBean () para obtener el alcance de la etiqueta del bean como prototipo, se generará una nueva instancia |
petición | Aplicado en un proyecto web, después de que Spring crea esta clase, se almacenará en el alcance de la solicitud |
sesión | Aplicado en un proyecto web, después de que Spring crea esta clase, almacena esta clase en el alcance de la sesión |
globalsessio | Aplicado en un proyecto web, debe utilizarse en un entorno de portlet. Pero si no existe tal entorno, en relación con la sesión |
Modo singleton (modo predeterminado):
<bean id="userService" class="com.zy.service.impl.UserServiceImpl" scope="singleton"></bean>
Modo de prototipo (casos múltiples):
<bean id="userService" class="com.zy.service.impl.UserServiceImpl" scope="prototype"></bean>
Usamos el código del artículo anterior para probar estos dos modos:
bean.xml se configura como un modo singleton al configurar la etiqueta del bean:
<bean id="userService" class="com.zy.service.impl.UserServiceImpl" scope="singleton"></bean>
Ejecute el código de prueba:
public class TestDemo01 {
public static void main(String[] args) {
//加载配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
//根据bean标签的id获取实例对象
UserService userService1 = (UserService) context.getBean("userService");
UserService userService2 = (UserService) context.getBean("userService");
//调用方法
userService1.saveUser();
System.out.println(userService1);
System.out.println(userService2);
System.out.println(userService1 == userService2);
}
}
Resultado de la operación:
se puede ver que la dirección del objeto es la misma cuando se imprime dos veces.
Al configurar etiquetas de bean en bean.xml, configúrelas como modo prototipo:
<bean id="userService" class="com.zy.service.impl.UserServiceImpl" scope="prototype"></bean>
Continúe ejecutando el código de prueba anterior, los resultados son los siguientes: Se
puede ver que las direcciones de los dos objetos impresos no son las mismas.