2

我有一个注释:

@Target( { ElementType.METHOD } )
@Retention( RetentionPolicy.RUNTIME )
@Inherited
public @interface Privilege {

    String[] value();   
}

还有一个界面:

public interface UserService {
    @Privilege("USER_READ")
    UserDTO getUserProperties(long userId);
}

及其实施:

public class UserServiceImpl implements UserService {
     public UserDTO getUserProperties(long userId) { ... }
}

和 Spring AOP 设置:

    <aop:aspectj-autoproxy />
    <aop:config>
      <aop:aspect id="securityAspect" ref="hlSecurityCheck">
      <aop:pointcut id="securityPointcut" 
                    expression="@annotation(services.annotation.Privilege)" />
                <aop:around pointcut-ref="securityPointcut" method="checkService" />
...

为什么这不起作用?(当我将注释直接放在 UserServiceImpl 的方法上时,它正在工作......

谢谢!

4

2 回答 2

3

在 Java 中,注解不是从接口继承而来的。您应该创建一个抽象超类来执行此操作。有关更多信息,请查看为什么 java 类不从已实现的接口继承注释?

于 2013-09-03T06:52:00.147 回答
0

@Inhereted注解只能被类和接口本身继承,不能被它们的方法继承。也就是说,如果您使用注释UserService进行@Privilege注释,那么UserServiceImpl将继承它。

于 2013-09-03T06:34:06.943 回答