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"/>