Sping装配之——自动装配

Spring组件扫描与装配实践
本文详细介绍了Spring框架中组件扫描和自动装配的实现机制。通过创建CD和CDPlayer类,演示了如何利用@Component注解使Spring自动发现并创建bean,以及如何通过@ComponentScan启用组件扫描。最后,通过JUnit测试验证了组件扫描的有效性。

Sping从两个角度来实现自动化装配:

  • 组件扫描(component scaning):spring会自动发现应用上下文中所创建的bean;
  • 自动装配(autowiring):spring自动满足bean之间的依赖。

为了阐述组件扫描和装配,我们需要创建几个bean,他们代表一个音响系统中的组件。首先创建一个CD类,Spring会发现它并将其创建为一个bean。然后,会创建一个CDPlayer类,让Spring发现它,并将CD bean注入进来。下面进行代码演示:

package soundsystem;

//作为接口 定义了CD播放器对一盘CD所能进行的操作
public interface CD {
    void play();
}
View Code
 1 package soundsystem;
 2 
 3 import org.springframework.stereotype.Component;
 4 
 5 //这个简单的注解会标明该类为组件类
 6 //并告知Spring要为这个类创建bean
 7 @Component
 8 public class CDTest1 implements CD {
 9 
10     private String title = "十一月的肖邦";
11     private String artist = "JayZhou";
12 
13     public void play() {
14         System.out.println("正在播放:" + title + ",由" + artist + "演唱");
15     }
16 }
View Code

不过,组件扫描默认是 不启用 的。我们还需要显示配置以下Sping,从而命令他去寻找带有 @Component 注解的类,并为其创建bean。

创建类CDPlayerConfig:

 1 package soundsystem;
 2 
 3 import org.springframework.context.annotation.ComponentScan;
 4 import org.springframework.context.annotation.Configuration;
 5 
 6 @Configuration
 7 @ComponentScan
 8 public class CDPlayaerConfig {
 9 
10 }
View Code

类CDPlayerConfig是通过JAVA代码定义了Spring的装配规则。后续的博客中会详细介绍该中配置的使用方式。现在,我们只需要观察以下CDPlayerConfig类并没有显示地声明任何bean,只不过是用了@ComponentScan注解,这个注解能够在Spring中启用组件扫描,默认会扫描与该类相同的包下的文件。寻找带有@Component注解的类,并为其创建一个bean.

最后,测试组件扫描能够发现CD。我们创建一个简单的JUnit测试:

 1 package soundsystem;
 2 
 3 import org.junit.Test;
 4 import org.junit.runner.RunWith;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.test.context.ContextConfiguration;
 7 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 8 
 9 //用于在测试开始时自动创建Spring上下文
10 @RunWith(SpringJUnit4ClassRunner.class)
11 //告诉上下文需要在CDPlayerConfig中加载配置
12 @ContextConfiguration(classes = { CDPlayerConfig.class })
13 public class CDPlayerTest {
14     //自动装配
15     @Autowired
16     private CD cd;
17 
18     @Test
19     public void test() {
20         cd.play();
21     }
22 }
View Code

测试结果:

正在播放:十一月的肖邦,由JayZhou演唱

 

如果想为组件扫描的bean命名,可以使用该形式:@Component("yourname")

如果想设置组件扫描的基础包:@ComponentScan(basePackages = "packagename"),  如果是多个包,采用数组形式

 

转载于:https://www.cnblogs.com/ustc-anmin/p/10138434.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值