a02-1 装配Bean-自动化装配(Spring实战)

  • 创建对象之间的协作关系称为装配,这也就是依赖注入的本质
本篇内容
  • 1、Spring自动化装配
  • 2、实现组件扫描
  • 3、bean实现自动化装配
1、Spring在装配方式有三种:
  • 1、在Xml中进行显示配置
  • 2、在java中进行显示配置
  • 3、隐式的bean发现机制和自动化装配
2、自动化装配bean
  • 1、组件扫描:Spring会自动发现应用上下文所创建的bean
  • 2、自动装配:Spring自动满足bean之间的依赖

一、自动化装配

1、定义接口

public interface CompactDisc {
    void play();
}

2、定义实现类

@Component
public class CDPlayer implements CompactDisc {
    public void play() {
        System.out.println("CD-Player  playing ... ... ");
    }
}
  • 注解说明
  • @Component:表明该类会作为组件类并告知Spring要为这个类创建bean

3、定义配置类

  • 定义Spring装配规则
@Configuration
@ComponentScan
public class CDConfig {
}
  • 说明:
  • @ComponentScan:这个注解能够在Spring中启用组件扫描,默认会扫描与配置相同的包

4、测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDConfig.class)
public class CDPlayerTest {
    @Autowired
    private CompactDisc compactDisc;
    @Test
    public void getBean() {
        compactDisc.play();
    }
}
  • 注解说明:
  • 1、使用SpringJUnit4ClassRunner便于在测试的时候自动创建Spring的应用上下文
  • 2、@ContextConfiguration:需要加载的配置
  • 3、@Autowired将对象注入到代码中

5、为组件扫描的bean命名

  • Spring应用上下文中所有的bean都有一个给定的ID,spring会根据类名给对象一个id,类名字母为小写
  • 给类配置固定的id
5.1、使用@component
@Component("pagger")
public class CDPlayer implement CompactDisc{}
5.2、使用@Named
@Named("pagger")
public class CDPlayer implement CompactDis{}

二、设置组件扫描的基础包

@Configuration
@ComponentScan(“com.demo”)
public class CDPlayerConfig{}
  • 说明:
  • 1、@ComponentScan(“com.demo”):指定了扫描的基础包名称
  • 2、@ComponentScan(basePackages=“com.demo”)使用这种方式更加清晰表示为包名

1、设置多个包扫描地址:

  • basePackages是复数知道可以设置多个包名,但是设置多个包名是不安全的行为

@ComponentScan(basePackages={“com.demo.service”,“com.demo.dao”})

2、指定包中的类或接口


@ComponentScan(basePackageClasses={UserDao.classUserService.class})

三、给bean实现自动装配

  • 自动装配就是让Spring自动满足bean依赖的方法,在满足依赖的过程中会在Spring应用中寻找匹配某个bean需求的其他bean。

1、创建接口

public interface CompactDisc {
    void play();
}

2、创建实现类

@Component
public class SgtPepper implements CompactDisc {
    public void play() {
        System.out.println("Sgt Pepper play ... ... ");
    }
}

3、创建实现类

@Component
public class CDPlayer {
    private CompactDisc compactDisc;
    @Autowired
    public CDPlayer(CompactDisc compactDisc) {
        this.compactDisc = compactDisc;
    }
    public void play() {
        compactDisc.play();
    }
}

4、创建配置类

@Configuration
@ComponentScan
public class CDConfig {
}

5、测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDConfig.class)
public class CDPlayerTest {

    @Autowired
    private CompactDisc compactDisc;
    @Autowired
    private CDPlayer cdPlayer;
    @Test
    public void showBean(){
        compactDisc.play();
    }
    @Test
    public void getBean() {
        cdPlayer.play();
    }
}

6、CDPlayer其他方式注入

    @Autowired
    public void setCompactDisc(CompactDisc compactDisc) {
        this.compactDisc = compactDisc;
    }
    @Autowired
    public void initCompactDisc(CompactDisc compactDisc) {
        this.compactDisc = compactDisc;
    }

7、注意

  • 1、如果没有匹配的bean在应用上下文创建时会抛出异常,为了避免异常可以给@Autowired添加属性
@Autowired(required=false)
  • 2、使用@Inject注解代替Autowired
  • Autowired是spring特有的注解,Inject是java规范的注解
代码地址:

https://github.com/brusion/brusion-code/tree/master/demo-java/03%20-%20demo%20-%20spring/spring-demo-study/01-di 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值