Spring总结 2.装配bean
Posted 兴趣使然~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring总结 2.装配bean相关的知识,希望对你有一定的参考价值。
本随笔内容要点如下:
- bean的作用域
- 占位符
一、bean的作用域
在默认情况下,Spring管理的bean的单例的。也就是说,无论注入多少次,都是同一个bean对象。一般情况下,单例模式是足以应付大多数场景。
Spring还提供了其他几个可选的作用域:
- prototype:原型,每次从容器获取对象的时候都会创建一个新的bean
- session:会话,用在Web应用中,为每一个会话都产生一个新bean
- request:请求,同session
- global session:与session类似,但是它只能在portlet的应用才能使用
- application:为每个ServletContext创建一个bean。有点像singleton了,毕竟一个web应用只有一个ServletContext
如果想改变bean的作用域的话,可以通过如下方式进行修改:
<bean id="xxx" class="xxx" scope="singleton" />
通过bean标签中的scope属性。如果是注解方式,那么可以使用注解@Scope
@Scope("prototype")
二、属性占位符
在使用spring依赖注入时,我们时常会设置对象的属性。例如配置连接池:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="xxx" /> <property name="jdbcUrl" value="xxx" /> <property name="user" value="xxx" /> <property name="password" value="xxx" /> </bean>
像上述那样子写那么值就变成硬编码了。一般会将属性值该抽取出来形成一个文件,再通过spring提供的属性占位符功能来注入值:
<context:property-placeholder location="classpath:db.properties"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean>
如上,那么我们就只需要把信息写在db.properties文件。采用Java配置如下:
@Configuration @PropertySource("classpath:db.properties") public class Config { @Autowired private Environment env; @Bean public DataSource dataSource() throws PropertyVetoException{ ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass(env.getProperty("jdbc.driverClass")); dataSource.setJdbcUrl(env.getProperty("jdbc.driverClass")); dataSource.setUser(env.getProperty("jdbc.driverClass")); dataSource.setPassword(env.getProperty("jdbc.driverClass")); return dataSource; } }
采用@PropertySource来引入配置文件,在代码里面,通过使用注入的Environment来获取要得到的属性。
以上是关于Spring总结 2.装配bean的主要内容,如果未能解决你的问题,请参考以下文章
Spring课程 Spring入门篇 3-2 Spring bean装配(上)之bean的生命周期