bean的作用域

HeJin大约 2 分钟Spring全家桶Spring入门

The following table describes the supported scopes:

ScopeDescription
singletonopen in new window(Default) Scopes a single bean definition to a single object instance for each Spring IoC container.
prototypeopen in new windowScopes a single bean definition to any number of object instances.
requestopen in new windowScopes a single bean definition to the lifecycle of a single HTTP request. That is, each HTTP request has its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.
sessionopen in new windowScopes a single bean definition to the lifecycle of an HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext.
applicationopen in new windowScopes a single bean definition to the lifecycle of a ServletContext. Only valid in the context of a web-aware Spring ApplicationContext.
websocketopen in new windowScopes a single bean definition to the lifecycle of a WebSocket. Only valid in the context of a web-aware Spring ApplicationContext.
img
img
img
img

单例模式(Spring默认机制)

The SingletonScope 单例模式

对于同一个类,Spring容器只会创建一个实例。每次从容器中get的时候,都是同一个对象。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:c="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="user" class="com.kuang.pojo.User" p:name="张三" p:age="33" scope="singleton"/>
</beans>

测试类

@Test
public void test2(){
    ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
    User user = context.getBean("user", User.class);
    User user2 = context.getBean("user", User.class);
    System.out.println(user.hashCode());
    System.out.println(user2.hashCode());
}

结果

134310351
134310351

原型模式

The Prototype Scope 原型模式

每次从容器中get的时候,都会产生一个新对象!

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:c="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
   
    <bean id="user" class="com.kuang.pojo.User" p:name="张三" p:age="33" scope="prototype"/>
</beans>

测试类

@Test
public void test2(){
    ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
    User user = context.getBean("user", User.class);
    User user2 = context.getBean("user", User.class);
    System.out.println(user.hashCode());
    System.out.println(user2.hashCode());
}

结果

134310351
1411892748

其余的request、session、application等只能在web开发中使用到!