美文网首页Java
Java Spring-bean的作用域

Java Spring-bean的作用域

作者: 一亩三分甜 | 来源:发表于2020-01-10 10:51 被阅读0次

使用bean的scope属性来配置bean的作用域

singleton:默认值。容器初始时创建bean实例,在整个容器的生命周期内只创建这一个bean,单例的。

    <bean id="car" class="com.cloud.spring.beans.autowire.Car" scope="singleton">
        <property name="brand" value="Audi"></property>
        <property name="price" value="300000"></property>
    </bean>

prototype:圆形的。容器初始化时不创建bean的实例。而在每次请求时都创建一个新的Bean实例,并返回。

    <bean id="car" class="com.cloud.spring.beans.autowire.Car" scope="prototype">
        <property name="brand" value="Audi"></property>
        <property name="price" value="300000"></property>
    </bean>

使用外部属性文件

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="root"></property>
        <property name="password" value="123"></property>
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql:///firstDB?rewriteBatchedStatements=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"></property>
    </bean>
    
        ApplicationContext context = new ClassPathXmlApplicationContext("beans-properties.xml");
        DataSource dataSource = (DataSource)context.getBean("dataSource");
        System.out.println(dataSource.getConnection());
//输出
com.mchange.v2.c3p0.impl.NewProxyConnection@4671e53b     

从外部properties文件中获取

    <!-- 导入属性文件 -->
    <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="${url}"></property>
    </bean>
 
db.properties文件中   
user=root
password=123
url=jdbc:mysql://localhost:3306/firstDB?rewriteBatchedStatements=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8
driverClass=com.mysql.jdbc.Driver

发现报错信息java.sql.SQLException: Access denied for user 'fish'@'localhost' (using password: YES),提示user变成了电脑主机名称。通过断点发现通过c3p0访问数据库的user为fish。


Snip20200110_2.png
Snip20200110_5.png

将配置文件beans-properties.xml和db.properties文件中的属性换个除user以外的任何一个名字即可。如换成username。

    <!-- 导入属性文件 -->
    <context:property-placeholder location="classpath:db.properties"/>

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 使用外部属性文件的的属性 -->
        <property name="user" value="${username}"></property>
        <property name="password" value="${password}"></property>
        <property name="driverClass" value="${driverClass}"></property>
        <property name="jdbcUrl" value="${url}"></property>
    </bean>
    
username=root
password=123
url=jdbc:mysql://localhost:3306/firstDB?rewriteBatchedStatements=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8
driverClass=com.mysql.jdbc.Driver
//输出
com.mchange.v2.c3p0.impl.NewProxyConnection@5204062d

因此,Mac电脑中使用c3p0线程池,不能使用关键字user作为c3p0 properties文件中的键名,如果windows电脑中,则不能使用关键字username作为c3p0 properties文件中的键名。否则会报相同的错误。

相关文章

  • Java Spring-bean的作用域

    使用bean的scope属性来配置bean的作用域 singleton:默认值。容器初始时创建bean实例,在整个...

  • 面试总结

    ajax 是否可夸作用域 java 作用域 jsp作用域 maven 插件 作用域 http 头部 请求体 mav...

  • 第2模块第1章21函数—作用域

    作用域 在Python中函数就是一个作用域,局部变量放置在其作用域中 C Java中作用域{}已经生成,作用域向上...

  • 作用域和作用域链

    作用域和作用域链 作用域 作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在Java...

  • JavaScript作用域

    JavaScript作用域 1.作用域 JavaScript的作用域与C、Java等语言不同,它不是以花括号包围的...

  • PHP只有函数作用域,没有块级作用域

    PHP有函数作用域,但是没有块级作用域,没有C/C++、java等语言的块级作用域概念

  • javaScript-04

    作用域 JS没有块级作用域 块作用域由 { } 包括。 在其他编程语言中(如 java、c#等),在 if 语句、...

  • 一道面试题引发的“血案”

    前言 es6之前,js的作用域只有两种,全局作用域和函数作用域,没有像C和java那样的块级作用域,于是对于学了C...

  • 干货丨let面试题解析

    前言 es6之前,js的作用域只有两种,全局作用域和函数作用域,没有像C和java那样的块级作用域,于是对于学了C...

  • 四:Java基础入门-变量的作用域

    1:作用域的定义 Java用一对大括号作为语句块的范围,称为作用域; 作用域中的变量不能重复定义; 离开作用域,变...

网友评论

    本文标题:Java Spring-bean的作用域

    本文链接:https://www.haomeiwen.com/subject/htjpactx.html