关于cglib动态代理的对象无法获取其属性注解的问题

@Service
public class MarketMoneyChangeService{
    @DynamicReference
    private IMarketBuyerProvider marketBuyerProvider;

    @Transactional(rollbackFor = Exception.class)
    public Boolean doChangeMoney() {

        return true;
    }

}

注解声明如下:

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 服务动态注入注解
 */
@Inherited
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DynamicReference {

}

代码中@DynamicReference为自定义注解, 作用是根据项目配置, 在运行时注入指定SpringBean或者Dubbo引用对象。正常情况下使用没问题, 但是当加上事务注解@Transactional时, MarketMoneyChangeService会变成cglib代理对象, 则使用Field无法获取到注解@DynamicReference

DynamicReference dynamicRefrence = filed.getAnnotation(DynamicReference.class);

求解大佬, 被cglib代理的对象如何获取属性的注解, 或者cglib代理的对象如何设置其属性值

判断是代理对象后,应该可以找到代理对象的父类,然后再获取其属性

使用AopUtils 拿到这个target,然后给target赋值 : AopUtils.getTargetClass() 你试试