<bean id = "testAction" class = "com.kewen.xxxAction" scope = "prototype"/>
Spring Bean中为何有的地方要将scope属性设为prototype?
先简单说一下两个属性值:
1.Spring中Bean的配置,如果不显式指明scope的值,那么默认为单例singleton。也就是说这个Bean只会新建一个实例。
2.设置为prototype之后,就会创建多个实例,可以理解为会new很多次。而singleton只会new一个实例
准确的说,每次spring要获取bean的时候,都会调用getBean()方法
如果这个bean是singleton,那就会取唯一的一个实例出来
如果是prototype,那么每次getBean(),都会new一个新实例
举两个简单的例子对比一下:
Class TestAction{
private int age;
}
每次请求都会传age过来,如果这个Action是个单例的话,后面请求的age,就把前面的给覆盖了,所以必须设置成prototype
对于
class TestService{
@Autowired
private IUserDAO dao;
}
由于它没有实例变量,所以不存在冲突的问题,用默认的单例就可以了
总结一下
1.对于有实例变量的类,要设置成prototype;没有实例变量的类,就用默认的singleton
2.Action一般我们都会设置成prototype,而Service只用singleton就可以。
分享到:
相关推荐
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
在Spring框架中,Bean的两种主要作用域是Singleton和Prototype。Singleton Bean表示在整个Spring IoC容器中只有一个实例,而Prototype Bean则表示每次请求都会创建一个新的实例。这两种作用域的使用场景和实现方式都...
`scope`属性可以设定Bean的作用域,如单例(singleton)或多例(prototype)。 总的来说,Spring Bean生命周期的理解和灵活运用,能帮助我们更好地控制Bean的行为,实现更高效、更可控的依赖管理和资源管理。通过...
如果Bean定义了初始化回调方法,如`init-method`属性指定的方法,Spring会在初始化后执行这个方法。 9. **Bean的销毁**: 对于Singleton Bean,Spring在容器关闭时会调用`@PreDestroy`注解的方法和实现...
在配置文件中,`p2`被定义为`prototype` Bean,通过`scope="prototype"`指定。在`BeanTest`中,我们请求`p2`两次并进行比较,结果发现两次得到的对象并不相同,这符合`prototype`作用域的行为。 在实际应用中,选择...
<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/> ``` 或者 ```xml <bean id="role" class="spring.chapter2.maryGame.Role" singleton="false"/> ``` 值得注意的是,Prototype作用域...
在Spring框架中,`scope`是一个非常重要的概念,它决定了Bean的生命周期和实例化策略。在Spring中,Bean的scope主要有以下几种: 1. **singleton(单例)**:这是默认的scope,每个容器中只有一个实例。无论多少次...
创建SpringBean配置工具类(安全)如: <bean id=... scope="prototype"></bean>
如果scope设为"prototype",每次请求都会创建一个新的Bean实例。 7. **销毁**:当容器关闭时,如果是"singleton"作用域的Bean,Spring会调用`DisposableBean`接口的`destroy()`方法。如果设置了`destroy-method`...
Spring IOC Bean标签属性介绍 0.Bean标签属性介绍 1.0 新建一个Maven工程 1.1 pom.xml 1.2 实体类JavaBean 1.2.1 User类 1.3 当Scope="singleton"时 1.4 当 Scope="singleton" 且 lazy-init="true" 时 1.5 当scope=...
2. **属性注入**:Spring容器将根据Bean定义中的属性值、setter方法或构造函数参数来设置Bean的依赖。这包括了基本类型、其他Bean引用、集合类型的依赖等。 3. **初始化回调**:Spring容器调用Bean的`init-method`...
- 初始化:Spring容器在创建Bean实例时,会执行初始化过程,包括实例化、属性设置(通过setter方法或构造函数注入)、初始化回调(如`InitializingBean`接口的`afterPropertiesSet()`方法或`@PostConstruct`注解的...
1. 实例化前:在这个阶段,Bean的属性已经设置完毕,但是还没有实例化。 2. 实例化:在这个阶段,Bean已经实例化,但是还没有进行任何其他操作。 3. 设置BeanName:在这个阶段,Bean已经实例化,并且已经设置了名称...
Spring bean可以有多种作用域,包括单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)等。单例bean在整个应用中只有一个实例,而原型bean每次请求都会创建新的实例。其他作用域主要适用于Web...
- **实例化**:Spring 根据 BeanDefinition 创建 Bean 实例,可能涉及构造器注入和属性设置。 - **初始化**:包括调用初始化方法,执行 Bean 生命周期中的其他初始化逻辑。 7. **延迟初始化与销毁**: - **延迟...
标题中的“Spring_0600_IOC_Bean_Scope”涉及到的是Spring框架中的核心概念——控制反转(Inversion of Control, 简称IOC)以及Bean的作用域(Scope)。在这个主题下,我们将深入探讨Spring如何通过IOC管理Bean的...
默认情况下,Bean是单例(Singleton),但在`@Scope`注解的帮助下,我们可以创建原型(Prototype)、会话(Session)或请求(Request)作用域的Bean。 最后,`AutowireCandidateResolver`和`BeanFactoryAware`接口...
Spring In Action-3.2@Scope单例、多例Bean,Spring In Action-3.2@Scope单例、多例Bean,Spring In Action-3.2@Scope单例、多例Bean,Spring In Action-3.2@Scope单例、多例Bean
4. **使用`Prototype`作用域**:Spring中的`Prototype`作用域允许每次请求时创建一个新的Bean实例,因此可以视为一种动态加载的方式。例如: ```xml <bean id="prototypeService" class=...
换言之,当把一个 bean 定义设置为 singleton 作用域时,Spring IoC 容器只会创建该 bean 定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该 bean 的后续请求和引用都将返回被...