@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代理的对象如何设置其属性值