spring学习-4
bean的作用域
使用bean的scope属性来配置bean的作用域
scope="singleton":默认是单例模式即容器初始化创建bean实例,在整个容器的生命周期内只创建这一个bean;
scope="prototype":原型的,即容器初始化时不创建bean的实例,而在每次请求时,都会创建一个新的bean实例。
配置spring作用域的scope.xml文件
<!-- scope:作用域类型 scope="prototype" -->
<bean name="car" class="com.test.autowire.Car" scope="singleton">
<property name="name" value="cc"></property>
<property name="price" value="33333.0"></property>
</bean>
测试Main方法代码
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"scope.xml");
Car car = (Car) ctx.getBean("car");
Car car2 = (Car) ctx.getBean("car");
System.out.println(car==car2);
}
运行效果
1、scope="singleton"运行结果:只创建了一个bean实例。返回结果为true,即car与car2指向同一个对象。
constructor create....
true
2、scope="prototype"运行结果:创建了多个bean实例,并且返回结果为false,即说明每次请求时,都会创建一个新的bean实例,指向的不是同一个对象
constructor create....
constructor create....
false
使用外部属性文件
在配置文件里配置 Bean 时, 有时需要在 Bean 的配置里混入系统部署的细节信息(例如: 文件路径, 数据源配置信息等). 而这些部署细节实际上需要和 Bean 配置相分离,
Spring 提供了一个 PropertyPlaceholderConfigurer 的 BeanFactory 后置处理器, 这个处理器允许用户将 Bean 配置的部分内容外移到属性文件中. 可以在 Bean 配置文件里使用形式为 ${var} 为变量赋值, PropertyPlaceholderConfigurer 从属性文件里加载属性, 并使用这些属性来替换变量. Spring 还允许在属性文件中使用 ${propName},以实现属性之间的相互引用。
以配置数据源为例进行外部文件配置
1.导入C3P0和MySQL驱动jia包
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring
2.新建数据源外部配置文件db.properties,配置信息要与本地MySQL配置文件信息保持一致,否则项目运行会出错
user=root
password=root
driverclass=com.mysql.jdbc.Driver
jdbcurl=jdbc:mysql:///test
3.配置spring的properties.xml文件,需要引入context 命名空间,前面文章提到过,不在多说。
<!-- 导入属性文件 使用context下的property-placeholder location:外部配置文件的位置-->
<context:property-placeholder location="classpath:db.properties" />
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 使用外部化属性文件的属性 格式:${属性名} -->
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<property name="driverClass" value="${driverclass}"></property>
<property name="jdbcUrl" value="${jdbcurl}"></property>
</bean>
4.Main方法主要代码
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"properties.xml");
//在强制类型转换时,要引入import javax.sql.DataSource命名空间,否则无法引用getConnection()方法
DataSource dataSource = (DataSource) ctx.getBean("dataSource");
try {
System.out.println(dataSource.getConnection());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
5.运行结果
com.mchange.v2.c3p0.impl.NewProxyConnection@1e4a7dd4
出处:http://www.cnblogs.com/feiii/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,原文链接否则保留追究法律责任的权利。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· 对象命名为何需要避免'-er'和'-or'后缀
· JDK 24 发布,新特性解读!
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· SQL Server如何跟踪自动统计信息更新?