文章目录
- 1.Bean的作用域
- 1.1 singleton
- 1.2 prototype
- 1.3 scope其它属性
1.Bean的作用域
SpringBean.java
package com.sdnu.spring6.bean;
public class SpringBean {
public SpringBean() {
System.out.println("执行springBean的构造方法");
}
}
spring-scope.xml
<?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 class="com.sdnu.spring6.bean.SpringBean" id="springBean" />
</beans>
Test
package com.sdnu.spring6.test;
import com.sdnu.spring6.bean.SpringBean;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringBeanScopeTest {
@Test
public void testBeanScope(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-scope.xml");
SpringBean sb = applicationContext.getBean("springBean", SpringBean.class);
System.out.println(sb);
SpringBean sb2 = applicationContext.getBean("springBean", SpringBean.class);
System.out.println(sb2);
SpringBean sb3 = applicationContext.getBean("springBean", SpringBean.class);
System.out.println(sb3);
}
}
1.1 singleton
默认情况下为单例的。
<bean class="com.sdnu.spring6.bean.SpringBean" id="springBean" scope="singleton"/>
- 在spring上下文初始化的时候实例化。
- 每调用一次getBean方法,都返回这个单例对象。
1.2 prototype
<bean class="com.sdnu.spring6.bean.SpringBean" id="springBean" scope="prototype"/>
- spring上下文初始化的时候,并不会初始化这些prototype的bean。
- 每调用一次getBean方法,实例化该bean对象。
1.3 scope其它属性
● singleton:默认的,单例。
● prototype:原型。每调用一次getBean()方法则获取一个新的Bean对象。或每次注入的时候都是新对象。
● request:一个请求对应一个Bean。仅限于在WEB应用中使用。
● session:一个会话对应一个Bean。仅限于在WEB应用中使用。
● global session:portlet应用中专用的。如果在Servlet的WEB应用中使用global session的话,和session一个效果。(portlet和servlet都是规范。servlet运行在servlet容器中,例如Tomcat。portlet运行在portlet容器中。)
● application:一个应用对应一个Bean。仅限于在WEB应用中使用。
● websocket:一个websocket生命周期对应一个Bean。仅限于在WEB应用中使用。
● 自定义scope:很少使用