Spring的Bean配置和装配

Spring的Bean配置和装配


每个bean定义只生成一个对象实例,每次getBean请求获得的都是此实例
spring单例默认是饿汉模式


XML配置

setter方法配置Bean

<!-- 无属性bean -->
<bean id="address" class="com.spring.xmlBean.Address"></bean>
<!-- 普通属性bean -->
<bean id="address" class="com.spring.xmlBean.Address">
        <property name="city" value="日照"></property>
        <property name="province" value="山东"></property>
</bean>
<!-- 通过ref引用其他bean作为属性 -->
<bean id="person" class="com.spring.xmlBean.Person">
        <property name="name" value="Little-Koala"></property>
        <property name="age" value="18"></property>
        <property name="address" ref="address"></property>
</bean>
<!-- 属性为集合的bean -->
<bean id="complexAssembly"class="com.ssm.chapter10.pojo.ComplexAssembly">
        <property name="id" value="1"/>
        <property name="list">
            <list>
                <value>value-list-1</value>
                <value>value-list-2</value>
            </list>
        </property>
        <property name="map">
            <map>
                <entry key="key1" value="value-key-1"/>
                <entry key="key2" value="value-key-2"/>
            </map>
        </property>
        <property name="props">
            <props>
                <prop key="prop1">value-prop-1</prop>
                <prop key="prop2">value-prop-2</prop>
            </props>
        </property>
        <property name="set">
            <set>
                <value>value-set-1</value>
                <value>value-set-2</value>
            </set>
        </property>
        <property name="array">
            <array>
                <value>value-array-1</value>
                <value>value-array-2</value>
            </array>
        </property>
    <!-- 集合的涉及对象的bean装载 -->
        <property name="list2">
            <list>
                <ref bean="role1"/>
                <ref bean="role2"/>
            </list>
        </property>
        <property name="map2">
            <map>
                <entry key-ref="role1" value-ref="user1"/>
                <entry key-ref="role2" value-ref="user2"/>
            </map>
        </property>
        <property name="set2">
            <set>
                <ref bean="role1"/>
                <ref bean="role2"/>
            </set>
        </property>
    </bean>

构造器配置Bean

<!-- 构造器普通参数 -->
<bean id="address" class="com.spring.xmlBean.Address">
        <constructor-arg name="city" value="日照"></constructor-arg>
        <constructor-arg name="province" value="山东"></constructor-arg>
</bean>
 <!-- 构造器对象参数 -->
<bean id="person" class="com.spring.xmlBean.Person">
        <constructor-arg name="name" value="Little-Koala"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
        <constructor-arg name="address" ref="address"></constructor-arg>
</bean>
<!-- 构造器也可以配置集合作为参数,格式类似与setter方法,这里不再列举 -->

命名空间

要使用命名空间需要在头部xml加入:

xmlns:p="http://www.springframework.org/schema/p" 
xmlns:c="http://www.springframework.org/schema/c"

装配bean引用与装配字面量的唯一区别在于是否带有“-ref”后缀。如果没有“-ref”后缀的话,所装配的就是字面量

<bean id="hello2" class="com.app.Hello" p:p1="v1" p:p2="v2" p:world-ref="world"/>
<bean id="hello2" class="com.app.Hello" c:arg1="c_arg1" c:arg2="2" c:arg3-ref="world"/>

命名空间的属性无法实现装配集合的功能,解决方法就是util命名空间

<util:list id="userList" value-type="java.lang.String">
        <value>张三</value>
        <value>李四</value>
        <value>王五</value>
</util:list>
<!-- 配置一个Map集合 -->
<util:map id="userMap">
        <entry key="user1" value-ref="user" />
        <entry key="user2">
            <!-- 配置一个内部Bean -->
            <bean class="io.shuqi.ssh.spring.util.User">
                <property name="userAge" value="12" />
                <property name="userName" value="小张" />
            </bean>
        </entry>
</util:map>
<!-- 命名空间中引用util命名空间 -->
<bean id="hello2" class="com.app.Hello" c:arg1="c_arg1" c:arg2="2" c:arg3-ref="list"/>

猜你喜欢

转载自www.cnblogs.com/yanghanwen/p/12202321.html