关闭

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

标签: spring
83人阅读 评论(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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:910次
    • 积分:84
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章存档