Spring 一二事(4) - 单例

spring bean配置后再默认情况下是单例的,如果需要配置可以选择 prototype, request, session和global session

在配置spring mvc的action时,可以对action使用 prototype

1    <!-- singleton: 默认单例 prototype: 多例 request ,session和global session: 只适用于web程序 -->
2     <bean id="scope_prototype" class="com.lee.spring005.scope.Scope"
3         scope="prototype"></bean>
4
5     <!-- destroy-method 一般在数据源的时候用到,关闭容易后就销毁连接 -->
6     <bean id="initDestory" class="com.lee.spring006.init_destory.InitDestory"
7         init-method="init" destroy-method="destory"></bean>

bean的创建销毁过程:

 1 package com.lee.spring006.init_destory;
 2
 3 public class InitDestory {
 4
 5     public InitDestory() {
 6         System.out.println("InitDestory() ");
 7     }
 8
 9     public void hello() {
10         System.out.println("Hello InitDestory!");
11     }
12
13     public void init() {
14         System.out.println("init");
15     }
16
17     public void destory() {
18         System.out.println("destory");
19     }
20 }

测试:

 1     @Test
 2     public void testInitDestory() {
 3
 4         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
 5
 6         InitDestory initDestory = (InitDestory)context.getBean("initDestory");
 7         initDestory.hello();
 8
 9         ClassPathXmlApplicationContext app = (ClassPathXmlApplicationContext)context;
10         app.close();
11     }

github地址:https://github.com/leechenxiang/maven-spring001-helloworld

时间: 2024-12-29 01:28:45

Spring 一二事(4) - 单例的相关文章

【Spring】8、Spring框架中的单例Beans是线程安全的么

看到这样一个问题:spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上,大部分的Spring bean并没有可变的状态(比如Serview类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的.如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全. 最浅显的解决办法就是将多态bean的作用域由"singleton&

Spring容器-ApplicationContext的单例设计

Spring容器-ApplicationContext的单例设计 每次通过new创建一个ApplicationContext容器,都会执行refresh方法,看源代码了解到这个refresh方法会重新加载配置文件,并且这个创建的容器对象持有一个所有singleton类型bean的map集合,从而实现单例,而且这个map对象的生命周期和容器对象的生命周期是一样的 如果我们每次都通过new一个容器对象,那么每次都要重新加载配置文件,都要重新生成这个singleton bean的集合,这样所谓的单例就

SSM-Spring-05:Spring的bean是单例还是多例,怎么改变?

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- Spring的bean是单例的 它在Spring容器初始化的时候创建对象 可以修改为多例,在此bean节点中添加一个属性,scope="prototype" 例如<bean id="xxx" class="全类名" scope="prototype"></bean> 然后多次getbean操作,会获取不同的实例化对

spring自动注入是单例还是多例?单例如何注入多例?

单例多例需要搞明白这些问题:      1. 什么是单例多例:      2. 如何产生单例多例:      3. 为什么要用单例多例      4. 什么时候用单例,什么时候用多例:   1. 什么是单例.多例: 所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action; 单例模式和多例模式说明: 1. 单例模式和多例模式属于对象模式. 2. 单例模式的对象在整个系统中只有一份,多例模式可以有

Spring工作原理与单例

最近看到spring管理的bean为单例的,当它与web容器整合的时候始终搞不太清除,就网上搜索写资料, Tomcat与多线程, servlet是多线程执行的,多线程是容器提供的能力. servlet为了能并发执行, 是因为servlet被这些thread使用,tomcat里创建响应的socketServer线程类接收请求连接,然后在再创建或引用对应的servlet实例来处理请求连接.servlet是单例的,只创建一次.所以最好不要使用serlvet中的实例字段. spring中的bean对象默

spring的controller是单例还是多例,怎么保证并发的安全

controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱.正因为单例所以不是线程安全的. 我们下面来简单的验证下: package com.riemann.springbootdemo.controller; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.we

spring利用lookup-method标签单例bean中注入多例bean

1.单例bean A声明为抽象类,并编写抽象方法.如下: protected abstract B createB(); 2.在配置文件中配置如下: <bean id="a" class="A"> <lookup-method name="createB" bean="b"/> </bean> <bean id="b" class="B"/>

Spring 一二事(9) - xml 形式的 AOP

AOP在spring中是非常重要的一个 在切面类中,有5种通知类型: aop:before  前置通知 aop:after-returning  后置通知 aop:after  最终通知 aop:after-throwing  异常通知 aop:around  环绕通知 1 <bean id="personDAO" class="com.lee.spring002.aop.xml.PersonDAOImpl"></bean> 2 <be

Spring 一二事(5) - 依赖注入

1 <!-- 依赖注入的装配过程 --> 2 <bean id="person" class="com.lee.spring007.di.xml.setter.Person"> 3 <property name="pid" value="1001"></property> 4 5 <property name="name" value="nat