想要在切入点表达式中使用@annotation拦截使用自定义注释(在本例中为@TestDocument)注释的方法。
当接口和实现方法都使用自定义注释进行注释时,它正在工作。(但期望通过仅注释接口方法来工作,假设它是可能的。请正确,如果不是这样的话)。
请建议。
示例代码: 建议类
public class AfterAdvisor implements AfterReturningAdvice {
public void afterReturning(Object returnValue, Method method,Object[] args, Object target) {
System.out.println("AfterAdvisor : after method invocation!");
}
自定义注释:
@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface TestDocument {
string test default "";
}
配置详情:
<aop:config>
<aop:pointcut id="addPointcut" expression="@annotation(com.xxx.annotation.TestDocument)" />
<aop:advisor pointcut-ref="addPointcut" advice-ref="afterAdvisor" order="1" />
</aop:config>
<bean id="afterAdvisor" class="com.xxx.AfterAdvisor" />
Testservice和TestServiceImpl是分别具有常用方法addTest(TestVO testVo)的接口和实现类,如图所示
现在2例:
接口和实现类(这两个方法都使用@TestDocument注释):
public interface TestService{
@TestDocument (test="test"))
public testVO addTest(TestVO testVo) ;
}
public class TestServiceImpl implements TestService{
@TestDocument (test="test"))
public testVO addTest(TestVO testVo) {
//do something
return testVo;
}
但是,如果可能的话,以下情况不起作用,并且预计会起作用。
接口和实现类(只有接口方法用@TestDocument注释):
public interface TestService{
@TestDocument (test="test"))
public testVO addTest(TestVO testVo) ;
}
public class TestServiceImpl implements TestService{
public testVO addTest(TestVO testVo) {
//do something
return testVo;
}
答案 0 :(得分:0)
我不认为可以做到。在Java中,注释不是从接口继承的。可以做的是: