从对象本身获取AOP代理
可以在Spring中获取给定对象的代理吗?我需要调用子类的函数。但是,很明显,当我直接拨打电话时,这些方面均未应用。这是一个例子:
public class Parent { public doSomething() {
Parent proxyOfMe = Spring.getProxyOfMe(this); // (please)
Method method = this.class.getMethod("sayHello");
method.invoke(proxyOfMe);
}
}
public class Child extends Parent {
@Secured("president")
public void sayHello() {
System.out.println("Hello Mr. President");
}
}
我找到了一种实现此目标的方法。它有效,但我认为不是很优雅:
public class Parent implements BeanNameAware { @Autowired private ApplicationContext applicationContext;
private String beanName; // Getter
public doSomething() {
Parent proxyOfMe = applicationContext.getBean(beanName, Parent.class);
Method method = this.class.getMethod("sayHello");
method.invoke(proxyOfMe);
}
}
回答:
请考虑重构你的代码或使用AspectJ编织。你可能会感到警告,这是解决方案
AopContext.currentProxy()
以上是 从对象本身获取AOP代理 的全部内容, 来源链接: utcz.com/qa/423994.html