1、applicationContext.xml文件
<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:util=”http://www.springframework.org/schema/util”
xmlns:p=”http://www.springframework.org/schema/p”
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd”>
<!– 配置bean
class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无参数的构造器
id:标识容器中的bean,id唯一。
–>
<bean id=”helloSpring” class=”com.yl.HelloSpring”>
<property name=”name” value=”Spring”></property>
</bean>
<!– 使用构造器注入属性值可以指定参数的位置和参数的类型,以区分重载的构造器 –>
<bean id=”car” class=”com.yl.Car”>
<constructor-arg value=”Audi” index=”0″></constructor-arg>
<constructor-arg value=”Shanghai” index=”1″></constructor-arg>
<constructor-arg value=”300000″ type=”double”></constructor-arg>
</bean>
<bean id=”car2″ class=”com.yl.Car”>
<constructor-arg value=”BMW” type=”java.lang.String”></constructor-arg>
<!– 如果字面值包含特殊字符,可以使用<![CDATA[]]> 包裹起来–>
<!– 属性值还可以使用value子节点进行配置 –>
<constructor-arg type=”java.lang.String”>
<value><![CDATA[<ShangHai~>]]></value>
</constructor-arg>
<constructor-arg value=”200″ type=”int”></constructor-arg>
</bean>
<bean id=”person” class=”com.yl.Person”>
<property name=”name” value=”Tom”></property>
<property name=”age” value=”24″></property>
<!– 可以使用property的ref属性建立bean之间的引用关系 –>
<!– <property name=”car” ref=”car2″></property> –>
<!– <property name=”car”>
<ref bean=”car2″/>
</property> –>
<!– 内部Bean,不能被外部引用,只能在内部使用 –>
<property name=”car”>
<bean class=”com.yl.Car”>
<constructor-arg value=”Ford”></constructor-arg>
<constructor-arg value=”BeiJing”></constructor-arg>
<constructor-arg value=”100000″></constructor-arg>
</bean>
</property>
</bean>
<bean id=”person2″ class=”com.yl.Person”>
<constructor-arg value=”Jerry”></constructor-arg>
<constructor-arg value=”25″></constructor-arg>
<!– <constructor-arg ref=”car”></constructor-arg> –>
<!– 测试null值 –>
<!– <constructor-arg><null/></constructor-arg> –>
<!– 为级联属性赋值。注意:属性需要先初始化后才可以为级联属性赋值,否则会有异常 –>
<constructor-arg ref=”car”></constructor-arg>
<property name=”car.speed” value=”260″></property>
</bean>
<!– 测试集合属性 –>
<bean id=”person3″ class=”com.yl.collections.Person”>
<property name=”name” value=”Mike”></property>
<property name=”age” value=”30″></property>
<property name=”cars”>
<!– 使用list节点为List类型的属性赋值 –>
<list>
<ref bean=”car”/>
<ref bean=”car2″/>
<bean class=”com.yl.Car”>
<constructor-arg value=”Ford”></constructor-arg>
<constructor-arg value=”BeiJing”></constructor-arg>
<constructor-arg value=”100000″></constructor-arg>
</bean>
</list>
</property>
</bean>
<!– 配置Map属性值 –>
<bean id=”newPerson” class=”com.yl.collections.NewPerson”>
<property name=”name” value=”Rose”></property>
<property name=”age” value=”24″></property>
<property name=”cars”>
<!– 使用map节点机map的entry子节点配置Map类型的成员变量 –>
<map>
<entry key=”AA” value-ref=”car”></entry>
<entry key=”BB” value-ref=”car2″></entry>
</map>
</property>
</bean>
<!– 配置Properties属性值 –>
<bean id=”dataSource” class=”com.yl.collections.DataSource”>
<property name=”properties”>
<!– 使用props和prop子节点来为Properties属性赋值 –>
<props>
<prop key=”user”>root</prop>
<prop key=”password”>1234</prop>
<prop key=”jdbcUrl”>jdbc:mysql:///test</prop>
<prop key=”driverClass”>com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>
<!– 配置单例的集合bean,以供多个bean进行引用.需要导入util命名空间 –>
<util:list id=”cars”>
<ref bean=”car”/>
<ref bean=”car2″/>
</util:list>
<bean id=”person4″ class=”com.yl.collections.Person”>
<property name=”name” value=”Jack”></property>
<property name=”age” value=”25″></property>
<property name=”cars” ref=”cars”></property>
</bean>
<!– 通过p命名空间为bean的属性赋值,需要先导入p命名空间,相对于传统的方式,更加简洁 –>
<bean id=”person5″ class=”com.yl.collections.Person” p:name=”Queen” p:age=”27″ p:cars-ref=”cars”></bean>
</beans>
2、Spring自动装配bean:
Spring IOC容器可以自动装配bean,需要做的仅仅是在<bean>的autowire属性里指定装配的模式
byType:根据类型自动装配,若IOC容器中有多个与目标类型一致的bean,在这种情况下,Spring将无法判定哪个bean最合适该属性,所以不能执行
byName:根据名称自动装配,必须将目标bean的名称和属性名设置的完全相同
constructor:通过构造器自动装配,当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”
xmlns:p=”http://www.springframework.org/schema/p”
xmlns:util=”http://www.springframework.org/schema/util”
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd”>
<bean id=”address” class=”com.yl.autowire.Address”
p:city=”BeiJing” p:street=”HuiLongGuan”></bean>
<bean id=”car” class=”com.yl.autowire.Car”
p:brand=”Audi” p:price=”30000″></bean>
<!– <bean id=”person” class=”com.yl.autowire.Person”
p:name=”Tom” p:address-ref=”address” p:car-ref=”car”></bean> –>
<!– 可以使用autowire属性指定自动装配的方式,
byName根据bean的名字和当前bean的setter风格的属性名进行自动装配 ,若有匹配的,则进行自动装配,若没有匹配的,则不装配
byType根据bean的类型和当前bean的属性的类型进行自动装配,若IOC容器中有一个以上的类型匹配的bean,则抛出异常
–>
<bean id=”person” class=”com.yl.autowire.Person”
p:name=”Tom” autowire=”byName”></bean>
</beans>
3、自动装配的缺点:
在bean配置文件里设置autowire属性进行自动装配将会装配bean的所有属性,然而,若只希望装配个别属性时,autowire就不够灵活了。
autowire属性要么根据类型自动装配,要么根据名称自动装配,不能两者兼而有之
一般情况下,在实际的项目中很少使用自动装配功能,因为和自动装配功能所带来的好处比起来,明确清晰的配置文档更有说服力。
转载请注明来源网站:blog.ytso.com谢谢!
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/7044.html