Spring
配置的可选方案
- 隐式的bean发现机制和自动装配。
- 在Java中进行显示配置。
- 在XML中进行显示配置。
1.自动化装配bean
Spring
从两个角度来实现自动化装配:
- 组件扫描(component scanning):
Spring
会自动发现应用上下文中所创建的bean。 - 自动装配(autowiring):
Spring
自动满足bean之间的依赖。
组件扫描
1、创建接口
package com.ql;
public interface CompactDisc {
void play();
}
2、创建实现类
package com.ql;
import org.springframework.stereotype.Component;
/**
* @Component 作为组件类
*/
//@Component
@Component("otherName")
public class SgtPeppers implements CompactDisc {
private String title = "Sgt.Pepper's Lonely Hearts Club Band";
private String artist = "The Beatles";
@Override
public void play() {
System.out.println("Playing " + title + "by " + artist);
}
}
3、启动组件扫描
- 3.1、 通过JavaConfig启动组件扫描
package com.ql;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @ComponentScan 启动组件扫描
* 扫描该包及其子包
*/
@Configuration
//@ComponentScan
//@ComponentScan("com.ql")
//@ComponentScan(basePackages = {"com.ql","com.ql2"})
@ComponentScan(basePackageClasses = {SgtPeppers.class, DVDPlayer.class})
public class CDPlayerConfig {
}
- 3.2、通过XML启动组件扫描
<context:component-scan base-package="com.ql"/>
自动装配
1、@Autowired
注解通过构造器注入:
package com.ql;
import org.springframework.beans.factory.annotation.Autowired;
public class CDPlayer implements MediaPlayer {
private CompactDisc compactDisc;
@Autowired
public CDPlayer(CompactDisc compactDisc) {
this.compactDisc = compactDisc;
}
@Override
public void play() {
}
}
2、@Autowired
注解任意方法注入:
@Autowired
public void CompactDisc(CompactDisc compactDisc) {
this.compactDisc = compactDisc;
}
2.Java配置bean
1、创建配置类并声明简单的bean
package com.ql;
@Configuration
public class CDPlayerConfig {
@Bean
public SgtPeppers sgtPeppers() {
return new SgtPeppers();
}
}
2、借助JavaConfig实现注入
@Configuration
public class CDPlayerConfig {
@Bean
public SgtPeppers sgtPeppers() {
return new SgtPeppers();
}
/*
*JavaConfig实现注入
*/
@Bean
public CDPlayer cdPlayer() {
return new CDPlayer(sgtPeppers());
}
/*
* 推荐方式
* 需要注入的bean不需要声明在同一个配置类中
* 实现了DI功能
*JavaConfig实现注入
*/
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc) {
return new CDPlayer(compactDisc);
}
}
3.通过XML配置bean
最为简单的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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
1、声明一个简单的bean
<bean id="SgtPeppers" class="com.ql.SgtPeppers"/>
2、借助构造器注入初始化bean
<constructor-arg>
元素。- 使用Spring 3.0 引入的c-命名空间。
<!-- <constructor-arg>元素 -->
<bean id="cdPlayer" class="com.ql.CDPlayer">
<constructor-arg ref="SgtPeppers"/>
</bean>
<!-- c-命名空间 -->
<bean id="cdPlayer" class="com.ql.cdPlayer.CDPlayer" c:cd-ref="SgtPeppers"/>