通过XML装配Bean
尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的.
3.1创建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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
</beans>
1.先前提过的@Bean的注解实现效果和如下的配置一样
<bean id="quest" class="QuestImpl"/>
2.借助构造器初始化Bean,有如下两种方式可以实现:
- <constructor-arg >元素名
- 使用Spring3.0所引入的c-命名空间
如下:
<bean id="braveKnight" class="BraveKnight" >
<constructor-arg ref="quest"/>
</bean>
<bean id="braveKnight" class="BraveKnight" c:quest-ref="quest"/>
装配集合,当我们需要往构造器中传入相应的多个参数的时候,我们可以使用集合来装相应的参数值,如下:
<!--注入BraveKnight-->
<bean id="braveKnight" class="BraveKnight" ref="quest">
<constructor-arg>
<list>
<value>sgt</value>
<value>Twinkle, twinkle, little start</value>
</list>
</constructor-arg>
</bean>
我们也可以用<ref>元素代替<value>,实现bean的列表装配:
<!--注入BraveKnight-->
<bean id="braveKnight" class="BraveKnight" ref="quest">
<constructor-arg >
<list>
<ref bean="quest"/>
<ref bean="minstrel"/>
</list>
</constructor-arg>
</bean>
当然我们也可以用同样的方式使用<Set>去装配
3.2.设置属性
到目前为止,我们都是通过构造器来注入相关的成员变量的,没有使用属性的Setter方法,接下来我们就看下Spring XML如何实现属性注入:
<bean id="SgtPeppers" class="com.CDDemo.SgtPeppers">
<property name="title" value="sgt"/>
<property name="song" value="Twinkle, twinkle, little start"/>
</bean>
我们也可以使用p-命名空间的方式装配Bean:
<bean id="SgtPeppers" class="com.CDDemo.SgtPeppers" p:title="sgt" p:song="Twinkle, twinkle, little start"/>
我们还可以用<list>来盛装更多的被集合List包裹的参数值:
<property name="titleList">
<list>
<value>Twinkle</value>
<value>twinkle</value>
<value>little start</value>
</list>
</property>
3.3.混合配置
当我们需要把几个类组合在一起的时候可以用@Import注解的方式:
@Component
@Import(CDPlayerConfig.class)
public class SgtPeppers implements CompactDisc {
private String title = "sgt";
private String song = "Twinkle, twinkle, little start";
public void play() {
System.out.println("title:" + title + "song:" + song);
}
}
@Component
@Import({CDPlayerConfig.class,CDTest.class})
public class SgtPeppers implements CompactDisc {
private String title = "sgt";
private String song = "Twinkle, twinkle, little start";
public void play() {
System.out.println("title:" + title + "song:" + song);
}
}
如果需要引入配置中的Bean,则可以@ImportResource()中加入相应为配置文件的地址:
@Component
@Import({CDPlayerConfig.class,CDTest.class})
@ImportResource("classpath:application.xml")
public class SgtPeppers implements CompactDisc {
private String title = "sgt";
private String song = "Twinkle, twinkle, little start";
public void play() {
System.out.println("title:" + title + "song:" + song);
}
}
如果我们需要在一个XML中引入另一个XML的配置,可以使用<import resource>引入相关的配置文件:
<?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.xsd">
<!--将application.xml引入进来-->
<import resource="application.xml"/>
</beans>