zoukankan      html  css  js  c++  java
  • Spring装配Bean---使用xml配置

    声明Bean

    Spring配置文件的根元素是<beans>.

    在<beans>元素内,你可以放所有的Spring配置信息,包括<bean>元素的声明.

    除了Beans命名空间,Spring的核心框架总共自带了10个命名空间配置:

     命名空间 用途
     aop     为声明切面以及将@AspectJ注解的类代理为Spring切面提供了配置元素
     beans     支持声明Bean和装配Bean,是Spring最核心也是最原始的命名空间
     context 为配置Spring应用上下文提供了配置元素,包括自动检测和装配Bean,注入非Spring直接管理的对象 
    jee  提供了与Java EE API的集成,例如JNDI和EJB
     jms 为声明消息驱动的POJO提供了配置元素    
    lang  支持配置由Groovy、JRuby、BeanShell等脚本实现的Bean    
     mvc 启用SpringMVC的能力,例如面向注解的控制器、视图控制器和拦截器    
    oxm  支持Spring的对象到xml配置的映射    
    tx  提供声明式事物配置    
     util 提供各种各样的工具类元素,包括把集合配置为Bean,支持属性占位符元素    
    
    

    xml结构如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
    
         <bean id="" class="">......</bean>
         <bean id="" class="">......</bean>
    </beans>    

    基于构造函数注入

    使用<constructor-arg>元素。如果不配置<constructor-arg>元素,那么Spring将使用默认的构造函数。

    <!---->
    <bean id="poem" class="com.wjx.betalot.impl.Sonnet">
         <constructor-arg value="Sonnet poem"></constructor-arg>
    </bean>
    <!-- 诗人 -->
    <bean id="poet" class="com.wjx.betalot.impl.Joe">
         <constructor-arg ref="poem"></constructor-arg>
    </bean>

    通过工厂方法创建Bean

    <bean>元素有一个factory-method属性,允许我们调用一个指定的静态方法,从而代替构造函数来创建一个类的实例

    <bean id="stage"  class="com.wjx.betalot.impl.Stage" factory-method="getInstance" /> 

    配置Bean的作用域

    <bean>元素有一个scope属性,允许我们指定Bean的作用域,Bean的作用域主要有一下几种,默作用域为单例singleton

    作用域 定义
    singleton 在每一个Spring容器中,一个Bean定义只有一个对象实例(默认)
    prototype 允许Bean的定义可以被实例化任意次(每次调用都创建一个实例)
    request 在一次HTTP请求中,每个Bean定义对应一个实例。该作用域仅在基于Web的Spring上下文(例如SpringMVC)中才有效
    session 在一个HTTP Session中,每个Bean定义对应一个实例。该作用域仅在基于Web的Spring上下文(例如SpringMVC)中才有效
    global-session 在一个全局HTTP Session中,每个Bean定义对应一个实例。该作用域仅在Portlet上下文中才有效
    <bean id="poem" class="com.wjx.betalot.impl.Sonnet" scope="prototype">

    配置Bean的初始化和销毁方法

    Spring提供了Bean生命周期的钩子方法。

    为Bean定义初始化和销毁操作,只需要使用init-method和destroy-method参数来配置<bean>元素。init-method属性指定了在初始化Bean时要调用的方法;destroy-method属性指定了Bean从容器移除之前要调用的方法。

    <!-- 观众看表演,表演开始前鼓掌欢迎,表演结束鼓掌 -->
    <
    bean id="auditorium" class="com.wjx.betalot.impl.Auditorium" init-method="applause" destroy-method="applause"/>

    使用<beans>元素的default-init-method和default-destroy-method属性配置所有<bean>共同默认的初始化方法和销毁方法

    <?xml version="1.0" encoding="UTF-8"?>   
    <beans xmlns="http://www.springframework.org/schema/beans"   
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
           xsi:schemaLocation="http://www.springframework.org/schema/beans    
                               http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"    
           default-init-method="applause"   
           default-destroy-method="applause"> ...    
    </beans> 

    注入Bean的属性

    使用<property>元素。value填充基础类型值,ref填充<bean>引用

    <!---->
    <bean id="poem" class="com.wjx.betalot.impl.Sonnet">
         <property name="lines" value="Sonnet poem"></property>
    </bean>
    <!-- 诗人 -->
    <bean id="poet" class="com.wjx.betalot.impl.Joe">
         <property name="poem" ref="poem"></property >
    </bean>

    装配集合属性,Spring提供了4种类型的集合配置属性 <list> <set> <map> <props>

    <bean id="poeticJuggler" class="com.wjx.betalot.performer.impl.PoeticJuggler">
        <property name="poemsMap">
            <map>
                <entry key="POEM1" value-ref="poem1"/>
                <entry key="POEM2" value-ref="poem2"/>
                <entry key="POEM3" value-ref="poem3"/>
            </map>
        </property>
        <property name="poemProperties">
            <props>
                <prop key="poem3">POEM3</prop>
                <prop key="poem2">POEM2</prop>
                <prop key="poem1">POEM1</prop>
            </props>
        </property>
        <property name="poemList">
            <list>
                <ref bean="poem1"/>
                <ref bean="poem2"/>
                <ref bean="poem3"/>
            </list>
        </property>
        <property name="poemSet">
            <set>
                <ref bean="poem1"/>
                <ref bean="poem2"/>
                <ref bean="poem3"/>
            </set>
        </property>
    </bean>           

    装配空值

    <property name="someNonNullProperty"><null/></property> 

    除了<property>元素配置属性外,使用spring的命名空间p也可以装配属性,当然你得在<beans>元素中先引入命名空间p

    <?xml version="1.0" encoding="UTF-8" ?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
    
         <bean id="poem" class="com.wjx.betalot.impl.Sonnet" p:line="Sonnet"/>
         <bean id="poet" class="com.wjx.betalot.impl.Joe" p:poem-ref="poem"/>
    </beans>

    好啦,关于使用xml配置装配Bean的内容就讲到这边,当然有些缺漏,比如没有讲到装配内部Bean,使用SpEL表达式装配属性等,这些有兴趣的可以去了解下。

  • 相关阅读:
    protobuf 使用
    rsync实现Linux与windows增量更新数据
    单例模式-通用写法1
    cxf RESTful service client
    IDEAspringboot项目自动生成junit测试
    Centos8配置网络NM
    Oracle终止正在执行中的存储过程
    Mysql Statement violates GTID consistency: CREATE TABLE ... SELECT.
    shell中判断变量是否存在某个集合中
    redis-ha部署
  • 原文地址:https://www.cnblogs.com/fightingcoding/p/AssemblyBean.html
Copyright © 2011-2022 走看看