在java中,依赖注入(Dependency Injection,简称DI)是一种设计模式,它通过将对象的依赖关系从代码中移除,而是通过外部容器来管理和注入依赖。这样可以提高代码的可维护性和可测试性。
AOP(Aspect-Oriented Programming,面向切面编程)是另一种编程范式,它允许开发者在不修改原有代码的情况下,通过切面(Aspect)来添加额外的功能。AOP通常使用代理模式来实现,通过在目标对象的方法调用前后插入切面逻辑。
当使用依赖注入框架(如Spring)进行依赖注入时,它会通过动态代理来创建被注入的对象。这意味着,实际上得到的是一个代理对象,而不是原始的被依赖注入对象。这个代理对象会拦截方法调用,并在调用前后执行一些额外的逻辑,比如AOP切面。
然而,由于代理对象是运行时动态生成的,它不是原始对象的实例,因此它不会被依赖注入框架所管理。这就是为什么AOP代理依赖注入之后,原始对象的依赖注入将失效的原因。
解决这个问题的一种方法是使用AOP框架提供的特殊注解来标记需要注入的依赖,这样AOP框架就能够正确的处理依赖注入。另一种方法是在AOP代理中手动处理依赖注入,将依赖注入到代理对象中,并将方法调用委托给原始对象。
总结起来,当使用AOP代理时,原始对象的依赖将失效,因为得到的是代理对象而不是原始对象。可以通过AOP框架提供的特殊注解或手动依赖注入来解决这个问题。
标签:依赖,对象,代理,切面,AOP,注入
From: https://www.cnblogs.com/sixty-thousand/p/18321754