私はsping3でいくつかのAOPコードを書いています。 ここに私の注釈があります。なぜfindAnnotationまたは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
をトリガーしません。