zoukankan      html  css  js  c++  java
  • Spring之旅第三篇-Spring配置详解

    上一篇学习了IOC的概念并初步分析了实现原理,这篇主要学习Spring的配置,话不多说,让我们开始!

    一、Bean元素配置

    1.1 基本配置

    看一个最基本的bean配置

    <bean name="hello" class="com.yuanqinnan.test.HelloWorld"></bean>

    上面的配置中,我们将bean交给spring管理,看其中属性字段:

    • class:被管理对象的完整类名

    • name:被管理对象的名称,可以通过名称获取改对象(可以重复,可以使用特殊字符)

    • id:与name作用相同(不可以重复,不可以使用特殊字符)

    1.2 bean的进阶配置

    scope属性

    • singleton:定义bean的范围为每个Spring容器一个实例(默认值)

    • prototype:定义bean可以被多次实例化(使用一次就创建一次)

    • request:定义bean的范围是HTTP请求,只有再使用有web能力的spring上下文时有效。

    • request:定义bean的范围是HTTP请求,只有再使用有web能力的spring上下文时有效。

    • global-session:定义bean的范围是全局HTTP会话,只有再portlet上下文中有效。

    生命周期属性

    • init-method:配置一个方法作为生命周期初始化方法.spring会在对象创建之后立即调用.

    • destory-method:配置一个方法作为生命周期的销毁方法.spring容器在关闭并销毁所有容器中的对象之前调用.

      代码如下

    <bean id="hello"  init-method="getInfo" destroy-method="destory" class="com.yuanqinnan.test.HelloWorld">
    </bean>

    注意,只有singleton的bean,destory-method才有效

    1.3实例化bean的方式

    1. 使用类构造器实例化(默认无参数)

    <bean id="hello" class="com.yuanqinnan.test.HelloWorld">
    </bean>
    1. 使用静态工厂方法实例化(简单工厂模式)

    public class HellowWorldFactory {
        public static HelloWorld createHellowWorld(){
            return  new HelloWorld();
        }
    }
     <bean name="hello2" 
              class="com.yuanqinnan.test.HellowWorldFactory"
              factory-method="createHellowWorld">
        </bean>
    1. 使用实例工厂方法实例化(工厂方法模式)

    public class HellowWorldFactory2 {
        public  HelloWorld createHellowWorld(){
            return new HelloWorld();
        }
    }
     <bean id="HellowWorldFactory2" class="com.yuanqinnan.test.HellowWorldFactory2"/>
        <bean id="hello3" factory-bean="HellowWorldFactory2" factory-method="createHellowWorld" />


    1.4 spring的分模块配置

    spring 允许多个文件进行配置,可以按照模块来进行配置

     <import resource="applicationContext2.xml"></import>

    二、spring 属性注入

    2.1 set方法注入

    <bean>元素的<property>子元素指明了使用它们的set方法来注入,可以使用property的value属性来注入简单类型

     <bean name="user" class="com.yuanqinnan.test.User">
            <!--值类型注入-->
            <property name="age" value="18"></property>
            <property name="name" value="tom"></property>
            <!-- 引用类型注入-->
            <property name="car" ref="car"></property>
        </bean>
        <bean name="car" class="com.yuanqinnan.test.Car">
            <property name="color" value="blue"></property>
        </bean>

    User类与Car类代码就不贴了,应该是可以看得懂。

    2.2 构造函数注入

    使用constructor-arg来完成构造方法的注入,注入的方式和setter方式注入相同。 可以通过type属性,控制注入的类型 可以通过index属性,控制注入的顺序 可以通过name属性,控制注入的名字

     <bean name="user2" class="com.yuanqinnan.test.User">
            <constructor-arg name="name" index="0" type="java.lang.String" value="lucy"></constructor-arg>
            <constructor-arg name="age" index="1" type="java.lang.Integer" value="20"></constructor-arg>
            <constructor-arg name="car" ref="car"></constructor-arg>
        </bean>

    2.3 spel注入

    <bean name="user3" class="com.yuanqinnan.test.User">
        <property name="name" value="#{user.name}"></property>
        <property name="age" value="#{user2.age}"></property>
        <!-- 引用类型注入 为car属性注入下方配置的car对象-->
        <property name="car" ref="car"></property>
    </bean>

    三、复杂类型注入

    3.1 数组

    <property name="arr">
        <array>
            <value>tom</value>
            <value>lucy</value>
            <ref bean="user2"></ref>
        </array>
    </property>

    3.2 List

    <property name="list">
        <list>
            <value>tom</value>
            <value>lucy</value>
            <ref bean="user2"></ref>
        </list>
    </property>

    3.3 Set

    <property name="set">
        <set>
            <value>com.jbdc.mysql.Driver</value>
            <value>root</value>
            <ref bean="user"/>
        </set>
    </property>

    3.4 Map

    <property name="map">
        <map>
            <entry key="url" value=""></entry>
            <entry key="user" value-ref="user"></entry>
            <entry key-ref="user3" value-ref="user2"></entry>
        </map>
    </property>

    3.5 Properties

    <property name="prop">
        <props>
            <prop key="url">com.jbdc.mysql.Driver</prop>
            <prop key="userName">root</prop>
            <prop key="password">1234</prop>
        </props>
    </property>

    总结:以上是spring的配置详解,都是通过XML装配,下一篇我们学习注解配置

  • 相关阅读:
    js对象Array —— 使用.操作符和用['xxx']访问对象的区别
    JavaScript为字符串提供的一些常用方法
    ES6新增属性——,模板字符串`` 中可使用${ }代替‘+’字符串拼接
    【vue】使用vue+element搭建项目,Tree树形控件使用
    vue循环遍历List,Map,Array
    解决分页查询只能查到本页信息的问题
    vue之 js字符串驼峰和下划线互相转换
    PHP中的对象遍历技巧
    php类的复制(克隆)
    php类的自动加载
  • 原文地址:https://www.cnblogs.com/yuanqinnan/p/10312037.html
Copyright © 2011-2022 走看看