依赖注入
创建应用对象之间的协作关系的行为通常被称为装配,这也是依赖注入的本质。
一. Spring 配置的可选方案
- 在Xml中进行显示配置(优先级:低)
- 在Java中进行显示配置(优先级:中)
- 隐式的bean发现机制和自动装配(优先级:高)
注:不同方案之间是可以配合使用的
二. 自动化装配bean
组件扫描:Spring会自动发现应用上下文中所创建的bean
自动装配:Spring自动满足bean之间的依赖
组件扫描
@Component注解:表明该类会作为组件类,并高数Spring要为这个类创建bean。
启动机制:组件扫描默认是不启用的,我们还需要显示配置一下Spring,从而命令它去寻找带有@Component注解的类,并为其创建bean。
配置默认启用组件扫描的方法:
- JavaConfig:@ComponentScan注解,默认扫描与配置类相同包下的类,@ComponentScan注解还有basePackages和basePackageClasser两个属性进行配置具体扫描包或者类
- Xml文件:
<context:component-scan>元素进行配置
eg:<context:component-scan base-package="cn.wukun">
自动装配
简单来说,自动装配就是让Spring自动满足bean依赖的一种方法,在满足依赖的过程中,会在Spring应用上下文中寻找匹配某个bean需求的其它bean。为了要声明自动装配,我们可以借助Spring的@Autowired注解(@Inject也可以但不建议)。
使用地方:不管是构造器、Setter方法还是其他的方法,Spring都会尝试满足方法参数上所声明的依赖。通常情况下就当作参数直接注入进来,如果用在方法上面不易识别且可能有其它错误
@Autowired
private CompactDisc compactDisc;
如果没有匹配的bean,那么在应用创建上下文的时候,Spring会抛出异常。为了避免异常的出现,你将可以@Autowired的required属性设置为false,此时需要作null检查。如果有多个bean都能满足依赖关系的话,Spring将会抛出一个异常,表名没有明确知名要选择哪个bean进行自动装配。
三. Java中显示配置bean
尽管在很多应用场景下通过组件扫描和自动装配实现Spring的自动化配置是更为推荐的方式,但有时候自动化配置的方案行不通,因此需要明确配置Spring。比如说,你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component和@Autowired注解的,因此就不能使用自动化配置的方案了。
使用实例:
@Configuration
public class SpittleConfig {
@Bean
public DataSource dataSource() {
BasicDataSource ds=new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/sample?useUnicode=true&characterEncoding=utf-8");
ds.setUsername("root");
ds.setPassword("1234");
return ds;
}
@Bean
public JdbcTemplate jdbcTemplate(){
return new JdbcTemplate(dataSource());
}
}
四. 备注
关于 在Xml中进行显示配置bean 需要了解的话自行百度,因为是最不建议的方式。
关于自动化配置和Java中显示配置bean的详细代码,参考地址为: