【发布时间】:2016-04-02 15:19:11
【问题描述】:
我正在用 sping3 编写一些 aop 代码。 这是我的注释。
@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。
【问题讨论】: