版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MASORL/article/details/82624338
自动装配的步骤为:
(1)普通的接口
(2)实现接口的类,使用@Component注解,告诉Spring需要为其创建bean(应该叫做创建组件类)
(3)开启组件扫描,为组件类创建bean
(4)通过@Autowried注解,自动注入到成员变量或方法参数中
具体代码:
接口1
package com.spring.action.autoconfig;
/**
* 一个光盘接口
*/
public interface CompactDisc {
void sing();//光盘的sing功能
}
接口1实现,使用@Component注解,表示组件类,会在spring 中创建bean
package com.spring.action.autoconfig;
import org.springframework.stereotype.Component;
/**
* CompactDisc实现类
*/
@Component
public class SgtPeppers implements CompactDisc {
public void sing() {
System.out.println("sgtPeppers的sing方法");
}
}
接口2
package com.spring.action.autoconfig;
/**
* 一个光盘接口
*/
public interface CompactDisc {
void sing();//光盘的sing功能
}
接口2实现
在构造器方法上使用了@Autowired标注,参数CompactDisc将由spring 中的bean来自动注入
package com.spring.action.autoconfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class CDPlayer implements MediaPlayer{
private CompactDisc compactDisc;
@Autowired
public CDPlayer(CompactDisc compactDisc){
this.compactDisc = compactDisc;
}
public void play() {
System.out.println("播放器开始播放");
compactDisc.sing();
}
}
配置类
@Configuration 注解:表明该类为注解类
@ComponentScan注解:启动组件扫描功能,没有参数的@ComponentScan,默认扫描配置类同包下的组件
package com.spring.action;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
public class JavaConfig {
}
ok,以上几步,一个Spring的简单自动装配完成,如何测试?
CompactDiscTest为一个测试类
@RunWith(StringJunit4ClassRunner.class): 使用SpringJunit4ClassRunner.class,可以在测试开始的时候自动创建Spring的应用上下文
@ContextConfiguration: 表示加载配置,有几种加载的方式,这里,选用的是加载配置类。
@Autowired : 当变量上修饰了这个注解时,Spring会自动将创建号的bean赋值过去。
package com.spring.action;
import com.spring.action.autoconfig.CDPlayer;
import com.spring.action.autoconfig.CompactDisc;
import com.spring.action.autoconfig.JavaConfig;
import com.spring.action.autoconfig.MediaPlayer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
//使用SpringJUnit4ClassRunner,可以在测试开始的时候自动创建Spring的应用上下文
@RunWith(SpringJUnit4ClassRunner.class)
//导入配置
@ContextConfiguration(classes = JavaConfig.class)
public class AutoconfigTest {
@Autowired
private CompactDisc compactDisc;
@Autowired
private MediaPlayer mediaPlayer;
@Test
public void play() {
mediaPlayer.play();
}
}
测试结果:可以看见,成功运行了sgtPeppers的实现方法
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
播放器开始播放
sgtPeppers的sing方法