依赖注入

依赖注入

创建应用对象之间的协作关系的行为通常被称为装配,这也是依赖注入的本质。

一. Spring 配置的可选方案

  1. 在Xml中进行显示配置(优先级:低)
  2. 在Java中进行显示配置(优先级:中)
  3. 隐式的bean发现机制和自动装配(优先级:高)

注:不同方案之间是可以配合使用的

二. 自动化装配bean

组件扫描:Spring会自动发现应用上下文中所创建的bean

自动装配:Spring自动满足bean之间的依赖

组件扫描

@Component注解:表明该类会作为组件类,并高数Spring要为这个类创建bean。

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

配置默认启用组件扫描的方法:

  1. JavaConfig:@ComponentScan注解,默认扫描与配置类相同包下的类,@ComponentScan注解还有basePackages和basePackageClasser两个属性进行配置具体扫描包或者类
  2. 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的详细代码,参考地址为:

  1. 自动化配置 https://github.com/wukunpdd/SpringInActionCode/tree/master/bean-autoconfig
  2. Java中显示配置 https://github.com/wukunpdd/SpringInActionCode/tree/master/bean-javaconfig
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值