关闭

Spring4.0学习笔记-bean之间的关系,作用域以及使用外部属性文件

标签: spring
192人阅读 评论(0) 收藏 举报
分类:

bean之间的关系
      bean之间的关系有继承和依赖,一个bean可以继承父bean的属性和值,也可以覆盖父bean的属性和值,实例代码:

<bean id="address" class="cn.xjie.spring.beans.autowire.Address" p:city="BeiJing" p:street="HuiLongGuan"></bean>
    <!-- bean 配置的继承:使用bean的parent属性指定继承哪个bean的配置 -->
    <bean id="address2" p:street="DaZongShi" parent="address"></bean>

Main类

package cn.xjie.spring.beans.relation;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.xjie.spring.beans.autowire.Address;
import cn.xjie.spring.beans.autowire.Person;

public class Main {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");
        Address address = (Address) ctx.getBean("address");
        System.out.println(address);

        Address address2 = (Address) ctx.getBean("address2");
        System.out.println(address2);
    }
}

运行结果

Address [city=BeiJing, street=HuiLongGuan]
Address [city=BeiJing, street=DaZongShi]

bean的作用域
      bean的四种作用域,分别为singleton,prototype,request,session,这里介绍singleton和prototype。
      singleton:默认值,容器初始化时创建bean实例,在整个容器的生命周期内只创建这一个bean,所以是单例的。
      prototype:原型的,容器初始化时不创建bean的实例,而在每次创建一个新的bean实例,并返回。

实例代码

package cn.xjie.spring.beans.scope;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.xjie.spring.beans.autowire.Car;

public class Main {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-scope.xml");

        Car car = (Car) ctx.getBean("car");
        Car car2 = (Car) ctx.getBean("car");
        System.out.println(car == car2);
    }
}

当xml配置文件里scope属性为singleton时,程序运行结果为true,表示car和car2为同一个对象,而scope属性为prototype时,程序结果为false。

使用外部属性文件
      Spring配置文件允许使用外部属性文件,比如配置数据源。
实例代码
我们现在src即类路径下创建一个properties文件,命名为db.properties

user=root
password=wxj111
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql:///pythontest

xml里配置代码
在xml配置文件里需要引入context命名空间,location指定外部属性文件位置,然后在value属性里以${value}这样的方式接收值

<!-- 导入属性文件 -->
    <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>

Main类测试代码

package cn.xjie.spring.beans.properties;

import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.xjie.spring.beans.autowire.Address;
import cn.xjie.spring.beans.autowire.Person;

public class Main {
    public static void main(String[] args) throws SQLException {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-properties.xml");
        DataSource dataSource = (DataSource) ctx.getBean("dataSource");
        System.out.println(dataSource.getConnection());
    }
}

运行结果

com.mchange.v2.c3p0.impl.NewProxyConnection@2fd7945d
1
0
查看评论

spring学习小结4——bean 的作用域 和引入外部属性文件

bean的作用域:singleton,prototype 默认情况下,在IOC容器中配置的bean是单例的。即IOC容器只会为这个bean结点创建一个bean对象,每次调用getBean()方法都会返回同一个 bean。     使用bean的scope...
  • u012574931
  • u012574931
  • 2016-02-25 20:36
  • 332

spring之注入不同作用域之间的bean

在配置bean时 默认bean的作用域是单例的 也就是scope = “singleton” 的,也就是在项目中只存在一个的 但是有时候为了配置不同的属性 需要在singleton中加入prototype的bean 这时候就会出现Bug 所以 要设置动态代理功能 此时要加入一个包在spring的cg...
  • qq_31214097
  • qq_31214097
  • 2016-10-02 16:01
  • 396

(八)spring_使用外部属性文件

为什么要使用外部属性文件 •在配置文件里配置 Bean 时, 有时需要在 Bean 的配置里混入系统部署的细节信息(例如: 文件路径, 数据源配置信息等). 而这些部署细节实际上需要和Bean 配置相分离 •Spring 提供了一个 PropertyPlaceholderConfigurer 的...
  • a1034386099
  • a1034386099
  • 2016-07-23 10:29
  • 230

Spring Bean的作用域之间有什么区别?

Spring容器中的bean可以分为5个范围。所有范围的名称都是自说明的,但是为了避免混淆,还是让我们来解释一下: 1.       singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bea...
  • miachen520
  • miachen520
  • 2016-07-31 10:01
  • 1161

Spring4学习笔记(七):bean的作用域和使用外部属性文件

一、bean 的作用域 在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域. 默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一一个实例, 整个 IOC 容器范围内都能共享该实例:所有后续的 getBean...
  • whiteblack_dream
  • whiteblack_dream
  • 2017-05-31 13:19
  • 198

Spring4笔记----使用外部属性文件配置 bean

在配置文件里配置 Bean 时, 有时需要在 Bean 的配置里混入系统部署的细节信息(例如:文件路径、 数据源配置信息等)。 而这些部署细节实际上需要和 Bean 配置相分离。  Spring 提供了一个 PropertyPlaceholderConfigurer 的 ...
  • snow_7
  • snow_7
  • 2016-07-28 09:55
  • 694

spring(9) Spring中使用外部属性文件

Spring的配置文件中配置数据库信息可以使用外部属性文件,在配置文件中导入即可,导入使用。 Spring配置代码如下: context:property-placeholder location="classpath:jdbc.properties"/> ...
  • xiongwt
  • xiongwt
  • 2015-07-20 22:36
  • 699

Spring学习笔记(11)------------bean之间的关系

1)继承: 如果多个bean存在相同的配置信息,Spring允许我们定义一个父,子将自动继承父的配置信息。 如下: ? 1 2 3 <bean class="com.baobaobao.Car" id="car1" p:color=...
  • u011225629
  • u011225629
  • 2015-05-03 17:54
  • 1307

不同作用域(scope)的Spring Bean之间的依赖关系的动态代理注入

Spring Bean可能具有不同的作用域(Scope),相同域的Spring Bean之间互相依赖基本没有问题。 但是不同域的Spring Bean之间互相依赖,如果不做特殊定义,则只能在实例化Spring Bean时注入其所依赖的其他Spring Bean。如果被注入的Spring Bean的作...
  • taiyangdao
  • taiyangdao
  • 2016-03-25 09:12
  • 1370

Spring中Bean的五个作用域

当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域: singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例 protot...
  • u011468990
  • u011468990
  • 2015-11-23 15:35
  • 19238
    个人资料
    • 访问:2232次
    • 积分:98
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章存档