SpringAOP对获取Bean的影响理解

目录

1.根据类型装配Bean

1)情景一

2)情景二

3)情景三

4)情景四

5)情景五

2.使用总结


1.根据类型装配Bean

1)情景一

  • bean 对应的类没有实现任何接口,根据 bean 本身的类型获取 bean(这个bean放入了IOC容器)
  • 测试:IOC容器中同类型的 bean 只有一个

        正常获取到 IOC 容器中的那个 bean 对象

  • 测试:IOC 容器中同类型的 bean 有多个

        会抛出 NoUniqueBeanDefinitionException 异常,表示 IOC 容器中这个类型的 bean 有多个

2)情景二

  • bean 对应的类实现了接口,这个接口也只有这一个实现类(这个实现类,也就是bean对应的类加入了IOC容器)
  • 测试:根据接口类型获取 bean
  • 测试:根据类获取 bean
  • 结论:上面两种情况其实都能够正常获取到 bean,而且是同一个对象

3)情景三

  • 声明一个接口
  • 接口有多个实现类
  • 接口所有实现类都放入 IOC 容器(所有的实现类都加入了 IOC容器)
  •     测试:根据接口类型获取 bean

        会抛出 NoUniqueBeanDefinitionException 异常,表示 IOC 容器中这个类型的 bean 有多个

  •     测试:根据类获取bean

        正常

4)情景四

  • 声明一个接口
  • 接口有一个实现类
  • 创建一个切面类,对上面接口的实现类应用通知(代理类对象加入了IOC容器)
  • 测试:根据接口类型获取bean

        正常

  • 测试:根据类获取bean

        无法获取

原因分析:

  • 应用了切面后,真正放在IOC容器中的是代理类的对象
  • 目标类并没有被放到IOC容器中,所以根据目标类的类型从IOC容器中是找不到的

5)情景五

  • 声明一个类
  • 创建一个切面类,对上面的类应用通知(代理类对象加入了IOC容器)
  • 测试:根据类获取 bean,能获取到

2.使用总结

对实现了接口的类应用切面

对没实现接口的类应用切面

如果使用AOP技术,目标类有接口,必须使用接口类型接收IoC容器中代理组件!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值