Spring-2bean之间的关系,作用域,外部属性文件

2020-03-12  本文已影响0人  RyanHugo

1.bean的继承关系

<!-- 抽象bean 这样的bean的abstarct为true ,无法由ioc实例化,只能继承
        若一个bean无class属性,肯定是抽象bean
        
        depend-on则初始化时必须关联一个bean,否则报错
     -->
<!-- bean的配置的继承,parent指向被继承的bean,userf继承user -->
    <bean id = "user" p:name = "haha" abstract="true"> </bean>
    <bean id = "userf" class="beanrelation.User" parent="user" depends-on="person"></bean>

    <!-- 构造器注入 -->
    <bean id = "person" class = "test.Person">
        <constructor-arg value="tom" name="name"></constructor-arg>
        <constructor-arg value="12"></constructor-arg>
        
    </bean>

2.bean的作用域

    <!-- bean的作用域:Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一一个实例, 
        整个 IOC 容器范围内都能共享该实例:所有后续的 getBean() 调用和 Bean 引用
        都将返回这个唯一的 Bean 实例.
        该作用域被称为 singleton, 它是所有 Bean 的默认作用域 
        prototype每次调用getBean都会返回一个新的实例
        
        补充:singleton会在创建ioc容器时创建单例bean
        prototype在ioc容器初始化时不创建bean,每次请求返回一个新的bean
        即:new ClassPathXmlApplicationContext()是否会创建bean
        -->
    <bean id = "userpro" class= "beanrelation.User" scope="prototype"></bean>
bean的作用域

3.bean的外部属性文件(db.properties)

spring的xml配置

<!-- 引用外部文件 -->
    <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>

外部db.properties

user=root
password=12345
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:///test

代码使用

DataSource dataSource = (DataSource) c.getBean("dataSource");
        dataSource.getConnection();
上一篇 下一篇

猜你喜欢

热点阅读