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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值