Bean的装配
什么是装配?
-
装配(wiring)就是创建应用对象之间协作关系的行为。
在Spring中有三种装配Bean的方式
-
第一种是在XML文件中进行显式设置
-
第二种是在Java代码中进行显式配置
-
第三种是自动装配和隐式的Bean发现机制
自动装配
Spring中实现自动化装配Bean:
-
组件扫描(component scanning):Spring自动扫描应用上下文中所创建的Bean。
-
自动装配(auto wiring):Spring自动满足Bean之间的依赖。
- 首先我们需要创建一个可以被发现的Bean(为了后期的可扩展,使用面向接口编程)
package com.ww.component;
/**
* 定义为一个接口 定义可以对Music进行的操作
* @author WW
*/
public interface Music {
void play();
}
----------------------------------------------------------------------------
package com.ww.component;
import org.springframework.stereotype.Component;
/**
* Music接口的实现类 面向接口编程
* @author WW
*/
@Component("musicImpl")
public class MusicImpl implements Music{
@Override
public void play() {
System.out.println("播放电音");
}
}
@Component注解 org.springframework.stereotype.Component
-
这个注解表明这个类要成为一个组件类,并且Spring要为这个类创建Bean。
-
Spring应用上下文中所有的Bean都会给定一个ID,如果没有明确指定ID,Spring将会以这个注解的类名首字母小写之后的名字成为Bean的ID,如果需要自定义就可将自定义的ID传递给注解@Component(“自定义的Bean的ID名”)。
-
注解@Named(“自定义的Bean的ID名”) javax.inject.Named 也可以达到这个功能但是不推荐。
- Spring的自动扫描默认是不启动的,所以我们需要通过一个Config配置类来达到启用扫描的目的。
package com.ww.component;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* 组件扫描默认是不启用的,想要启用需要显式配置一下Spring
* 使得Spring去寻找带Component注解的类并且创建Bean
* @author WW
*/
@Configuration
@ComponentScan
public class MP3Config {
}
@Configuration注解 org.springframework.context.annotation.ComponentScan
-
定义Spring的配置类
@ComponentScan注解 org.springframework.context.annotation.Configuration
-
没有特别配置的情况下ComponentScan默认扫描与配置类处于相同位置的包和该包下的子包如果发现有@Component注解的类就会在Spring中自动为其创建一个Bean;