zoukankan      html  css  js  c++  java
  • Spring配置文件XML详解

    1.bean的基本属性配置:

    <!-- id是bean的标识符,必须唯一,如果没有配置id,name默认为标识符
          如果配置了id,有配置了name,那么name为别名
         name可以设置多个别名,分隔符可以是空格 逗号 分号
         class是bean的全限定名,即包名加类名
            如果不配置id和name,那么可以根据applicationContext.getbean(Class)获取对象,
       scope:bean的作用域,
          取值:singleton:单例的,整个容器只产生一个对象,默认是单例
             prototype:原型,每次获取bean都创建一个新对象
             request:每次请求时创建一个新的对象
             session:在一个会话范围内只产生一个对象
             application:在应用范围内是一个对象
        autowire:自动装配 用于简化spring的配置
          取值:byname:根据名称(根据set方法中set后面的内容)去查找相应的bean,发现了则装载上
             bytype:根据类型自动装配,不用去管id,但同一种类型的bean只能有一个,f否则报错
             constructor,当通过构造器注入实例化bean时,装配构造方法
             
             -->
        <bean id="userMysqlDaoImpl" class="com.wang.dao.impl.UserMysqlDaoImpl"></bean>
        <bean id="userOracleDaoImpl" class="com.wang.dao.impl.UserOracleDaoImpl"></bean>
        <bean id="service" class="com.wang.service.UserService">
            <property name="userDao" ref="userOracleDaoImpl"></property>
        </bean>
    

      

    2.团队协作开发(import标签):

    <!--可以读取到其他配置的xml,如果在当前目录下,直接写文件名,如果是在其他目录下,要写完整包名,以"/"分隔-->
    <import resource="beans1.xml"/>
    

      

    3.bean的继承(parent属性):

    如果car1和car2对象同属于类Car,在配置文件中,他们之间就可以使用parent属性来简化代码:

    <bean id="car1" class="com.wang.entity.Car">
            <property name="brand" value="Audi"/>
            <property name="price" value="1000000"/>
      </bean>
      <bean id="car2" parent="car1">
            <property name="price" value="3000"></property>
      </bean>
    

      

    这样的配置,car2就继承了car1中的class属性和brand的属性.简化了代码,car1称为父bean,car2称为子bean.car2可以覆盖从car1继承过来的属性,比如price.

    4.抽象bean(abstract属性)

    当在bean标签中设置属性abstract="true",即指定该bean为抽象bean,不会被实例化,一般仅供被其他的bean继承.

    抽象bean,可以不指定class属性,而是在继承它的子Bean中设置class属性.

    5.bean的关联(depend-on属性)

    要求在配置类A的bean时,必须有一个关联的类B的bean,换句话说类A的bean依赖于类B的bean,这时可以在类A的bean标签中设置depend-on="bBean".

    这样设置的话,类B的bean会先初始化,    

    6.使用外部属性文件

    在配置文件中配置Bean时,有时候需要在bean的配置里混入一些系统部署的细节信息(例如文件路径,数据源配置信息),而这些部署细节实际上需要和bean配置相分离.

    在配置c3p0数据源连接池时,我们可以这样写:

    <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://localhost:3306/test"></property>
         <!-- <property name="initPoolSize" value="3"></property>
            <property name="maxPoolSize" value="10"></property>  -->
        </bean>
    

      

    为了使数据库配置信息和spring的配置文件分离,便于维护,更好的方法是这样:

    在src目录下,新建一个db.properties文件,,内容如下:

    jdbc.user=root
    jdbc.password=123
    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.jdbcUrl=jdbc:mysql://localhost:3306/hibernate
    
    jdbc.initialPoolSize=5
    jdbc.maxPoolSize=10
    

      

    在beans.xml中:

    <!-- 导入资源文件 -->
        <context:property-placeholder location="classpath:db.properties"/>
        <!-- 配置c3p0连接池 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="user" value="${jdbc.user}"></property>
            <property name="password" value="${jdbc.password}"></property>
            <property name="driverClass" value="${jdbc.driverClass}"></property>
            <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
         <!-- <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
            <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>  -->
        </bean>

    注意使用context的标签,需要在头文件中添加支持context的信息,这里不再给出.

    7.管理bean的生命周期:

    SpringIOC容器可以管理bean的生命周期,在Bean生命周期的特定点执行定制的任务.

    在bean标签中有和,为bean指定初始化和销毁方法.当设置了这两个属性后,bean的生命周期是这样的:

    创建bean实例->为bean的属性设置值,或对其他bean进行引用->调用bean的初始化方法->根据需要调用bean自己的方法(使用bean)->容器关闭时,调用bean的销毁方法.

    参考网址http://www.cnblogs.com/ioufev/p/9950768.html

  • 相关阅读:
    基于Redis的短链接设计思路
    再谈对协变和逆变的理解(Updated)
    Java基础—ClassLoader的理解
    遇到个小问题,Java泛型真的是鸡肋吗?
    一次失败升级后的反思
    JVM是如何分配和回收内存?有实例!
    一个Java对象到底占用多大内存?
    《深入理解Java虚拟机》读书笔记:垃圾收集器与内存分配策略
    快速掌握RabbitMQ(二)——四种Exchange介绍及代码演示
    快速掌握RabbitMQ(一)——RabbitMQ的基本概念、安装和C#驱动
  • 原文地址:https://www.cnblogs.com/alice-cj/p/10424066.html
Copyright © 2011-2022 走看看