Я пишу код aop с sping3. Вот моя аннотация.Почему findAnnation или getAnnotation возвращает null?
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSource {
String name() default "foo"
}
И я поставил pointcut
к вышеупомянутой аннотации.
<aop:pointcut id="service" expression="@annotation(com.foo.datasource.DataSource)" />
<aop:advisor advice-ref="dataSourceExchange" pointcut-ref="service" order="1"/>
<bean id="dataSourceExchange" class="com.foo.datasource.DataSourceExchange"/>
Я пишу метод сервиса и добавляю к нему приведенную выше аннотацию. В классе DataSourceExchange
, который вызывается перед службой, я пытаюсь получить аннотацию.
class DataSourceExchange implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println("Method name : "
+ invocation.getMethod().getName());
System.out.println("Method arguments : "
+ Arrays.toString(invocation.getArguments()));
DataSource dataSource = AnnotationUtils.findAnnotation(invocation.getMethod(), DataSource.class);
System.out.println(dataSource);
Я правильно получил имя метода. Но аннотация dataSource
просто возвращает null
. В чем проблема? Я думаю, что метод сервиса, который я назвал, определенно должен быть аннотирован, иначе он не будет вызывать pointcut
.