笔记3 装配Bean总结

Posted lyj-gyq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记3 装配Bean总结相关的知识,希望对你有一定的参考价值。

一、自动化装配bean

1.组件扫描

2.自动装配

CompactDisc.java

1 package Autowiring;
2 
3 public interface CompactDisc {
4     void play();
5 
6 }

SgtPeppers.java

SgtPeppers类上使用了@Component注解。

这个简单的注解表明该类会作为组件类,并告知Spring要为这个类创建bean。没有必要显式配置SgtPeppersbean,因为这个类使用了@Component注解,所以Spring会为你把事情处理妥当。

 1 package Autowiring;
 2 
 3 import org.springframework.stereotype.Component;
 4 
 5 @Component
 6 public class SgtPeppers implements CompactDisc {
 7     private String title = "Sgt. Pepper‘s Lonely Hearts Club Band";
 8     private String artist = "The Beatles";
 9 
10     @Override
11     public void play() {
12         // TODO Auto-generated method stub
13         System.out.println("Playing " + title + " by " + artist);
14     }
15 
16 }

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

 

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

 

通过Java代码定义了Spring的装配规则@ComponentScan默认会扫描与配置类相同的包。

因为CDPlayerConfig类位于Autowiring包中,因此Spring将会扫描这个包以及这个包下的所有子包,查找带有@Component注解的类。

这样的话,就能发现CompactDisc的实现类,并且会在Spring中自动为其创建一个bean。

测试

CDPlayerTest.java

 1 package Autowiring;
 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 @RunWith(SpringJUnit4ClassRunner.class)
10 @ContextConfiguration(classes = Autowiring.CDPlayerConfig.class)
11 public class CDPlayerTest {
12     @Autowired
13     private CompactDisc cd;
14 
15     @Test
16     public void test() {
17         cd.play();
18     }
19 }

CDPlayerTest使用了Spring的SpringJUnit4ClassRunner,以便在测试开始的时候自动创建Spring的应用上下文。

注解@ContextConfiguration会告诉它需要在CDPlayerConfig中加载配置。因为CDPlayerConfig类中包含了@ComponentScan,因此最终的应用上下文中应该包含CompactDisc这个bean。在测试代码中有一个CompactDisc类型的属性,并且这个属性带有@Autowired注解,以便于将CompactDisc这个bean注入到测试代码之中

二、通过Java代码装配Bean

CDPlayerConfig.java

 

 1 package Javawiring;
 2 
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.Configuration;
 5 
 6 @Configuration
 7 public class CDPlayerConfig {
 8 
 9     @Bean
10     public CompactDisc randomBeatlesCD() {
11         int choice = (int) Math.floor(Math.random() * 4);
12         if (choice == 0) {
13             return new SgtPeppers();
14         } else if (choice == 1) {
15             return new WhiteAlbum();
16         } else if (choice == 2) {
17             return new HardDaysNight();
18         } else {
19             return new Revolver();
20         }
21     }
22 
23 
24     @Bean
25     public CDPlayer cdPlayer(CompactDisc randomBeatlesCD) {
26         return new CDPlayer(randomBeatlesCD);
27     }
28 }

 

@Configuration注解表明这个类是一个配置类 , 移除了@ComponentScan注解,此时的CDPlayerConfig类就没有任何作用了。

声明简单的bean

 

1     @Bean
2     public CDPlayer cdPlayer(CompactDisc randomBeatlesCD) {
3         return new CDPlayer(randomBeatlesCD);
4     }

 

CDPlayer实现了一个接口,构造函数的参数是实现了CompactDisc接口的类,然后执行其相应的方法。

 

 1     @Bean
 2     public CompactDisc randomBeatlesCD() {
 3         int choice = (int) Math.floor(Math.random() * 4);
 4         if (choice == 0) {
 5             return new SgtPeppers();
 6         } else if (choice == 1) {
 7             return new WhiteAlbum();
 8         } else if (choice == 2) {
 9             return new HardDaysNight();
10         } else {
11             return new Revolver();
12         }
13     }

三、通过XML装配bean

声明一个bean

1 <bean id="sgtPepperss" class="XMLwiring.SgtPepperss" ></bean>

测试的时候修改@ContextConfiguration("classpath:SoundSystemXMLwiring.xml"),然后定义相应的对象进行测试。

四、混合装配

两个Java配置文件,在一个总的配置文件中使用@Import({ CDConfig.class, CDPlayerConfig.class })进行结合。

1.在JavaConfig中引用XML配置  <@ImportResource注解>

@ImportResource("classpath:SoundSystemJavaXMLwiring.xml")

2.在XML配置中引用JavaConfig

将Java配置文件当作bean在XML文件中进行声明即可。

 

以上是关于笔记3 装配Bean总结的主要内容,如果未能解决你的问题,请参考以下文章

《spring实战》学习笔记-第二章:装配bean

Spring学习笔记之装配Bean

spring学习笔记装配Bean 静态工厂 资源来自网络 版权非本人

Spring实战读书笔记Spring装配Bean

Spring实战读书笔记Spring装配Bean

Spring_总结_03_装配Bean之自动装配