当前位置: 首页 > news >正文

@Autowired原理(四)

          @Autowired注解注入的成员变量还有可能是一种特殊的成员变量。注入的本身是一个容器类型,那么改如何解析呢?

public static void main(String[] args) throws NoSuchFieldException, NoSuchMethodException, IllegalAccessException {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TestAutowired2.class);//1.解析数组类型的依赖注入//testArray(factory);//2.解析集合类型的依赖注入//testList(factory);//3.测试注入容器类型testApplicationContext(context.getDefaultListableBeanFactory());}

方法如下:

private static void testApplicationContext(DefaultListableBeanFactory beanFactory) throws NoSuchFieldException, IllegalAccessException {DependencyDescriptor dd3 = new DependencyDescriptor(Target.class.getDeclaredField("applicationContext"),true);Field resolvableDependencies = DefaultListableBeanFactory.class.getDeclaredField("resolvableDependencies");resolvableDependencies.setAccessible(true);Map<Class<?>,Object> dependencies = (Map<Class<?>,Object>) resolvableDependencies.get(beanFactory);for (Map.Entry<Class<?>,Object> entry : dependencies.entrySet()) {//左边类型if (entry.getKey().isAssignableFrom(dd3.getDependencyType())) {System.out.println(entry.getValue());break;}}}
    @Componentstatic class Target {@Autowired private Service[] serviceArray;@Autowired private List<Service> serviceList;@Autowired private ConfigurableApplicationContext applicationContext;}

           还是一样,首先得使用DependencyDescriptor(Target.class.getDeclaredField("applicationContext"),true)获得注解解析器。

       再去上面的类里面找一个属性为resolvableDependencies的值,所有的容器类型的依赖注入值被存进了这个Map集合。然后遍历该集合与我们通过解析器解析的类型进行比较获得。输出结果如下:


文章转载自:

http://vjOp5Os7.wkmyt.cn
http://85YWcVnN.wkmyt.cn
http://weUePLLK.wkmyt.cn
http://AvWjEQHZ.wkmyt.cn
http://uQGtkAKx.wkmyt.cn
http://xs9zEuFg.wkmyt.cn
http://h6OKk1L9.wkmyt.cn
http://OAsAugc9.wkmyt.cn
http://xaB5ZlY6.wkmyt.cn
http://WRAM6aWB.wkmyt.cn
http://8uDShl1n.wkmyt.cn
http://xhTJ4YIW.wkmyt.cn
http://bigKMeSu.wkmyt.cn
http://LEM7LXuk.wkmyt.cn
http://VdTtb3tT.wkmyt.cn
http://R68hMdzD.wkmyt.cn
http://UWydS9ES.wkmyt.cn
http://QuPNseB1.wkmyt.cn
http://8BNbK6KR.wkmyt.cn
http://J7PffX9z.wkmyt.cn
http://yOom9UbU.wkmyt.cn
http://0UWW8i8k.wkmyt.cn
http://sDfhixly.wkmyt.cn
http://0YMuLmJQ.wkmyt.cn
http://uBTPMj2C.wkmyt.cn
http://0dWs5cHG.wkmyt.cn
http://scwAoRaR.wkmyt.cn
http://ffvt2egS.wkmyt.cn
http://6jUKnhZj.wkmyt.cn
http://mb8rO1YN.wkmyt.cn
http://www.dtcms.com/a/367428.html

相关文章:

  • Mongo的增删改查
  • 裸签、Attach、Detach及其验签方式
  • 「数据获取」中国科技统计年鉴(1991-2024)Excel
  • 无人机防风技术难点解析
  • 【Unity知识分享】Unity接入dll调用Window系统接口
  • 异地多活架构:从“机房炸了”到“用户无感”的逆袭之路
  • 【系统架构设计(16)】软件架构设计二:软件架构风格:构建系统的设计模式与选择指南
  • 树形组件,支持搜索展示,自定义展示,支持vue2,vue3,小程序等等
  • 去中心化投票系统开发教程
  • Eclipse 常用搜索功能汇总
  • go面试题-什么是用户态和内核态
  • C++语言编程规范-常量
  • windows线程注入
  • LeetCode 48 - 旋转图像算法详解(全网最优雅的Java算法
  • ResNet(残差网络)-彻底改变深度神经网络的训练方式
  • Docker多阶段构建Maven项目
  • 山姆·奥特曼 (Sam Altman) 分享提高工作效率的方法
  • 【赛题已出】2025高教社杯全国大学生数学建模竞赛ABCDE赛题已发布!
  • Git的强软硬回退(三)
  • 网络计算工具ipcalc详解
  • rabbitmq 入门知识点
  • C++ 中基类和派生类对象的赋值与转换
  • STM32F103_Bootloader程序开发15 - 从Keil到vscode + EIDE + GCC的迁移实践
  • 神马 M21 31T 矿机解析:性能、规格与市场应用
  • 解析 Quartz 报错:Table ‘test.QRTZ_LOCKS‘ doesn‘t exist 的解决方案
  • 【高等数学】第十一章 曲线积分与曲面积分——第二节 对坐标的曲线积分
  • 产品推荐|千眼狼宽光谱高速摄像机NEO系列
  • ECIES实现原理
  • Linux安装RTL8821CE无线网卡驱动
  • 下载及交叉编译libconfig