Spring配置主要有三种装配机制:
1.在XML中进行显式配置;
2.在JAVA中进行显式配置;
3.隐式的bean发现机制和自动装配。
一、在XML中进行显式配置
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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
这样,就创建了一个合法简单的Spring XML配置
2.声明一个简单的bean
<bean id="xiaoming" class="program.CoderA">
<constructor-arg value="xiaoming" />
</bean>
id代表bean的标识,class代表生成bean的类
3.借助构造器注入初始bean
这里有两种方式进行配置:
* constructor-arg>元素
* 使用spring3.0所引入的c-命名空间
<bean id="xiaohong" class="program.ProductManageA">
<constructor-arg ref="xiaoming" />
</bean>
spring遇到这个bean时,会创建一个ProductManageA的实例,并通过constructor-arg告知spring引用id为xiaomingbean。
通过c命名空间,首先应在xml声明其模式
xmlns:c="http://www.springframework.org/schema/c"
然后,在bean中直接声明:
<bean id="xiaohong" class="program.ProductManageA"
c:_0-ref="xiaoming"/>
这里,直接用0代表第一个构造器参数,_是因为数字不可以作为属性第一个字符。也可以使用构造器名。
若需装配集合时,我们只需要使用标签或标签即可,
如:
<constructor-arg>
<list>
<value>..</value>
<value>..</value>
</list>
</constructor-arg>
<!-- <set>标签同理-->
4.设值注入
使用set方法注入是,使用标签即可,与使用同理,也有简化的标签p:,与c:类同。
二、在JAVA中进行显式配置
创建一个配置类,并设置bean返回规则
@Configuration
public class ProgramConfig {
@Bean
public Coder coder(){
return new CoderA();
}
@Bean
public ProductManageA productManageA(Coder coder){
return new ProductManageA(coder);
}
}
三、隐式的bean发现机制和自动装配
创建一个config JAVA类
@Configuration//代表配置类
@ComponentScan//设置组件扫描
public class ProgramConfig {
}
@Component//创建可被发现的bean
public class ProductManageA implements ProductManage {
private Coder coder;
@Autowired//自动装配程序员
public ProductManageA(Coder coder){
this.coder=coder;
}
@Override
public void work() {
System.out.println("万恶的PM跟码农谈需求");
coder.coding();
}
}
//测试类
/* @RunWith(SpringJUnit4ClassRunner.class)以便在测试开始的时候自动创建Spring的应用上下文。注解 @ContextConfiguration会告诉它需要在ProgramConfig中加载配置。*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=ProgramConfig.class)
public class TestProgram {
@Autowired
private ProductManageA pmA;
@Test
public final void testJavaConfig(){
pmA.work();
}
}