• 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
    
    作者:starryfeiii
    出处:http://www.cnblogs.com/feiii/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,原文链接否则保留追究法律责任的权利。
  • 相关阅读:
    STM32 时钟配置分析
    STM32 开发板资源梳理
    STM32 摄像头实验OV2640
    STM32 TFT液晶屏与FSMC
    STM32 开发板电源与供电方式
    视觉里程计07 Qt的一些bug修改记录
    解决wireshark检测不到网卡的问题
    gdb 脚本调试
    [转] GCC 中的编译器堆栈保护技术
    使用gdbserver远程调试
  • 原文地址:https://www.cnblogs.com/feiii/p/6329588.html
Copyright © 2020-2023  润新知