Spring in action 4

第二章 装配Bean

  • 声明bean
  • 构造器注入和Setter方法注入
  • 装配bean
  • 控制bean的创建和销毁

2.1 Spring 配置的可选方案

  • 在XML中进行显示配置.
  • 在Java中进行显示配置.
  • 隐式的bean发现机制和自动装配.

2.2 自动化装配bean

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

  • 组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean.
  • 自动装配(autowiring):Spring自动满足bean之间的依赖.
2.2.1 创建可被发现的bean :
  • @ComponentScan 注解启用了组件扫描.
  • @Component 猪脚表明该类会作为组件类.
2.2.2 为组件扫描的bean命名:
  1. @Component("lonelyHearsClub");
  2. @Named("lonelyHearsClub");

Spring支持将@Named作为@Component注解的替代方案.两者之间有一些细微的差异,但是在大多数场景中,他们是可以互相替换的.建议用@Component.

2.2.3 设置组件扫描的基础包

@ComponentScan 默认规则,他会以配置类所在的包作为基础包(base package)来扫描组件.

  • @ComponentScan("com")
  • @ComponentScan(backPackages="com,")
  • @ComponentScan(basePackageClasses={CDPlayer.class,DVDPlayer.class})

可以在包中创建一个用来进行扫描的空标记接口(marker interface).通过标记接口的方式,你依然能够保持对重构又好的接口引用,但是可以避免引用任何实际的应用程序的代码.

2.2.4 通过为bean添加注解实现自动装配
  • 使用@Autowired注解地方
    1. 构造器上添加@Autowired注解,表明当Spring创建CDPlayer bean的时候,会通过这个构造器来进行实例化并且会传入一个可设置给CompactDisc类型的bean.(?如果传入一个接口类型,当spring启动,多个实现类具体传入哪个呢?)
    2. Setter方法上面添加@Autowired注解,当这个bean初始化时候,Spring会自动注入.(结论,当在方法上使用@Autowired方法时,Spring会自动注入)
  • @Autowired (required=false) , 默认 required为true,当应用上下文创建的时候,Spring会抛出一个异常.设置为false,Spring会尝试执行自动装配,但是囚没有匹配的bean的话,Spring将会让这个bean处于未装配的状态.

    但是当required设置为false时,如果没有null检查会出现空指针异常.

  • 如果有多个bean都能满足依赖关系的话,Spring将会抛出一个异常,表明没有明确指定要选择哪个bean进行自动装配. ( 自动装配的歧义性 ).
  • @Inject 和 @Autowired 可以互相替换.

2.3 通过Java代码装配bean

2.3.2 声明简单的bean
    @Bean(name = "lonelyHeartsClubBand")
    public CompactDisc sgtPeppers(){
        return new SgtPeppers();
    }
复制代码
2.3.3 借助JavaConfig实现注入
  • 方式一 :
    @Bean
    public CDPlayer cdPlayer(){
        return new CDPlayer(sgtPeppers());
    }
复制代码

看起来 , CompactDisc是通过调用sgtPeppers()得到的,但情况并非完全如此.因为sgtPeppers()方法上添加了@Bean注解,Spring将会拦截所有对它的调用,并确保直接返回该方法所创建的bean,而不是每次都对其进行实际的调用.

  • 方式二 :
    @Bean
    public CDPlayer cdPlayer(CompactDisc compactDisc){
        return new CDPlayer(compactDisc);
    }
复制代码

2.4 通过XML装配bean : 略

转载于:https://juejin.im/post/5be43c7d51882516e1540293

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值