Spring-Learning-01-自动化装配bean

《Spring实战(第四版)》学习笔记

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

  • 组件扫描(component scanning):Spring 会自动发现应用上下文中所创建的 bean。

  • 自动装配(autowiring):Spring 自动满足 bean 之间的依赖。


package soundsystem

@Component
//@Component("something")
public class SgtPeppers implements CompactDisc {
}

 @Component

        这个注解表明该类会作为组件类,并告知 Spring 要为这个类创建 bean;

        bean的创建会标记一个ID,默认是类名的首字母小写,也可以自己定义。


package soundsystem;

@Configuration
@ComponentScan
//@ComponentScan(basePackages="soundsystem")
//@ComponentScan(basePackages={"soundsystem", "video"})
//@ComponentScan(basePackageClasses={CDPlayer.class, DVDPlayer.clas}
public class CDPlayerConfig { 
}

@ComponentScan

         这个注解能够在 Spring 中启用组件扫描。如果没有其他配置的话,@ComponentScan 默认会扫描与配置类相同的包。因为 CDPlayerConfig 类位于 soundsystem 包中,因此 Spring 将会扫描这个包以及这个包下的所有子包,查找带有 @Component 注解的类。这样的话,就能发发现刚刚的注解 CompactDisc,并且会在 Spring 中自动为其创建一个 bean;

        可以指定不同的基础包,使用basePackages;

        也可以指定多个基础包,使用数组的形式传入;

        也可以将其指定为包中所包含的类或接口,使用basePackageClasses。同时,不是再使用 String 类型的名称来指定包,而是对basePackageClasses 属性所设置的数组中包含了类。这些类所在的包将会作为组件扫描的基础包。


@Configuration

        用于定义配置类,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。


package soundsystem;

@Component
public class CDPlayer implements MediaPlayer {
  @Autowired
  private CompactDisc cd;

  @Autowired
  public CDPlayer(CompactDisc cd) {
    this.cd = cd;
  }

  @Autowired
  //@Autowired(required=false)
  public void setCompactDisc(CompactDisc cd){
    this.cd = cd;
  }
}

@Autowired

        这个注解表明当 Spring 创建bean的时候,会通过这个构造器来进行实例化并且会传入一个可设置给该类型的 bean;

        @Autowired 注解不仅能够用在对象和构造器上,还能用在属性的 Setter 方法上。比如:CDPlayer 的setCompactDisc() 方法;

        不管是对象实例、构造器、Setter 方法还是其他的方法,Spring 都会尝试满足方法参数上所声明的依赖。假如有且只有一个 bean 匹配依赖需求的话,那 么这个 bean 将会被装配进来。如果没有匹配的 bean,那么在应用上下文创建的时候,Spring 会抛出 一个异常。为了避免异常的出现,可以将 @Autowired 的 required 属性设置为 false。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值