如果有的
interfaceA话,您可以使用此接口的实例
Proxy和
invoke方法的内部包装,
InvocationHandler您可以自由检查方法是否带注释,并根据该方法执行一些 *** 作:
class Initalizer implements InvocationHandler { private A delegate; Initializer(A delegate) { this.delegate = delegate; } public Object invoke(Object proxy, Method method, Object[] args) { if (method.isAnnotationPresent(magic.class)) { magic annotation = method.getAnnotation(magic.class); delegate.init(magic.arg); } method.invoke(delegate, args); }} A realA = ...;A obj = Proxy.newProxyInstance(A.class.getClassLoader(), new Class[] {A.class}, new Initializer(realA));
或者,您可以尝试使用AspectJ的“之前”建议。它将类似于下一个:
@Aspectpublic class Initializer { @Before("@annotation(your.package.magic) && target(obj) && @annotation(annotation)") private void initialize(A obj, magic annotation) {a.init(annotation.arg); }}
我不确定代码片段是否有效,它们只是说明想法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)