在需要添加自动注入的类加入注解
@Component
在类中,如果需要注入别的类,这个时候声明别的类,然后添加@AutoWried
具体例子
@Component
public class CDPlayer implements MediaPlayer {
@AutoWried
private CompactDisc cd;
@Override
public void play() {
cd.play();
}
}
系统在扫描时,发现@Component注解会将CDPlayer放入应用上下文,而在扫描到@AutoWried时,会将应用上下文中的ComPactDisc注入到里面
spring当中配置分为:javaConfig和xml
而在javaConfig
@Configuration
@ComponentScan
public class CDPlayerConfig {
}
此处使用@CompontScan注解,会去寻找当前CDPlayer所在位置的包里面的各个类,并进行注解扫描,当然CDPlayerConfig也被扫描到了,因为它使用了@Configuration注解。。当然@CompontScan也可以设置扫描具体的包,可以注解里面添加配置(具体遇到再说)
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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.husky.spring"/>
</beans>
具体测试的时候可以使用这个注解
@ContextConfiguration(classes=CDPlayerConfig.class)
或者*@ContextConfiguration(locations = “classpath:spring/soundsystem.xml”)*
/**
* @author husky
* @date 2018/10/17 16:31
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerJavaConfigTest {
@Rule
public final StandardOutputStreamLog log = new StandardOutputStreamLog();
@Autowired
private MediaPlayer player;
@Autowired
private CompactDisc cd;
@Test
public void cdShouldNotBeNull(){
assertNotNull(cd);
}
@Test
public void play(){
player.play();
assertEquals("Playing Sgt . Pepper's Lonely Hearts Club Band by The Beatles\n",log.getLog());
}
}
具体autoconfig在github