最近项目中使用InstantiationAwareBeanPostProcessorAdapter后处理bean的方式发布springbean到osgi容器,但是这里有个方法
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
第一个参数是Object
这个参数可能是目标对象也可能是代理对象。
现在我要获取原来对象类级别上的一个注解,而且需要通过反射对该对象进行调用 不管是不是代理对象都要完成这样的功能。
通过测试如果是jdk动态代理获取到的代理对象都是$Proxy+一个数字形式 获取不到目标对象上的注解
如果是cglib形式的代理,代理对象上面都是带有cglib字样的形式 能获取到目标对象的注解
通过反射都能正确调用到代理对象上的方法。
这样的话如果是jdk代理那么首先要获取到目标对象让后通过目标对象来获取注解就ok了。
猜测(有待验证):jdk代理直接通过代理形式 和目标对象没有关系 所以获取不到目标对象上的注解。
而cglib代理是通过继承的方式 所有注解也继承了下来这样生成的目标对象可以获取注解。
如何通过代理对象获取到目标对象可以通过
AopTargetUtils.java这个工具类 测试过可以获取到。
相关推荐
在Spring框架中,Bean是核心概念,它代表了应用程序中的对象,这些对象由Spring容器管理其生命周期和依赖关系。特殊Bean用法主要涉及Spring提供的多种高级特性,包括但不限于工厂方法、 prototype scope、AOP代理、...
它实现了 `BeanPostProcessor` 接口,会在 Bean 初始化后对其进行处理,生成代理对象。`AbstractAutoProxyCreator` 会查找 Spring 上下文中的 `Advisor`(顾问),每个 `Advisor` 包含一个 `Advice`(通知)和一个 `...
例如,可以查看`org.springframework.aop.framework.JdkDynamicAopProxy`和`org.springframework.aop.framework.CglibAopProxy`这两个类,它们分别实现了JDK和CGLIB代理。`InvocationHandler`接口的实现类`...
静态代理是在编译时就已经确定代理对象和真实对象的关系。在Spring中,我们可以通过自定义接口并实现该接口的两个类:一个是真实对象,另一个是代理对象。代理对象在调用真实对象的方法之前或之后,可以添加额外的...
在Spring框架中,`XXXPostProcessor` 是一种关键的组件,它允许我们在bean实例化、初始化前后进行定制化的处理。这种处理方式对于扩展Spring的功能,实现特定的逻辑或拦截bean的行为至关重要。`BeanPostProcessor` ...
在Spring框架中,`ImportBeanDefinitionRegistrar`、JDK代理和`FactoryBean`是三个关键的概念,它们在实现复杂的应用逻辑和扩展Spring的功能时起到重要作用。让我们深入理解这些概念,并结合MyBatis的原理,来探讨...
- Spring AOP提供了`DefaultAdvisorAutoProxyCreator`,它可以自动为匹配的Bean创建JDK代理。 - 切面(Aspect)是Spring AOP的核心,它封装了通知(Advice),通知定义了切面的逻辑。例如,我们可以创建一个`...
Spring AOP,全称Spring Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点,如日志、事务管理、性能监控等。在Spring AOP中,...
6. **生命周期管理**:Spring提供了一套完整的bean生命周期管理机制,包括初始化、销毁方法的调用,以及`InitializingBean`和`DisposableBean`接口的自动处理。 通过以上步骤,我们可以实现一个简化版的Spring框架...
- 配置Spring的ApplicationContext,定义bean的定义和依赖关系。 - 集成Spring MVC,配置DispatcherServlet,设置视图解析器和控制器。 - 配置Struts2,包括struts.xml配置文件,设定Action和结果页面。 - 集成...
在这个方法中,我们可以添加预处理(before advice)和后处理(after advice)逻辑。例如,我们可以在方法调用前记录日志,方法调用后进行结果验证。 4. **创建代理**:使用`java.lang.reflect.Proxy....
3. **通知类型**:Spring支持五种不同类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 4. **切点表达式**:切点表达式...
Spring框架利用动态代理技术为Bean提供了横切关注点(如事务管理、日志记录等)的集成方式,这极大地简化了应用程序的开发过程。本文将深入探讨Spring中动态代理的机制、关键概念以及其实现细节。 #### 动态代理...
Spring提供了两种动态代理的方式:JDK动态代理和CGLIB代理。 1. JDK动态代理: JDK动态代理基于Java的反射机制,适用于目标对象实现了接口的情况。在Java.lang.reflect包下,有两个关键类:InvocationHandler和...
Spring支持两种类型的AOP代理:JDK动态代理和CGLIB代理。 - JDK动态代理:基于Java反射API实现,适用于接口代理。如果目标对象实现了至少一个接口,Spring会使用JDK动态代理创建一个代理对象,该代理对象在调用...
- 创建代理对象时,Spring使用`java.lang.reflect.Proxy`类的静态方法`newProxyInstance()`,传入目标对象的类加载器、接口数组以及InvocationHandler实现,后者处理实际的调用逻辑。 2. **CGLIB代理**: - 如果...
1. JDK动态代理:当目标bean实现了至少一个接口时,Spring会使用Java的反射API创建一个代理类,该类实现了目标bean的所有接口,并在调用接口方法时插入增强代码。 2. CGLIB代理:如果目标bean没有实现任何接口,...
4. **BeanPostProcessor**:如果 Bean 实现了 BeanPostProcessor 接口,Spring 在初始化阶段会调用其方法,允许自定义的后处理逻辑,如属性校验、拦截器等。 5. **初始化回调**:Spring 会调用 Bean 的初始化方法,...