spring – 带注释的PRIVATE方法的AspectJ切入点


public class ServiceValidatorAspect {
    @Pointcut("within(@com.example.ValidatorMethod *)")
    public void methodsAnnotatedWithValidated() {

            pointcut = "methodsAnnotatedWithValidated()",
            returning = "result")
    public void throwExceptionIfErrorExists(JoinPoint joinPoint, Object result) {


public interface UserService {

    UserDto createUser(UserDto userDto);


    public class UserServiceImpl implements UserService {

       public UserDto createUser(UserDto userDto) {



       private validateUser(UserDto userDto) {

            // code here


8. Aspect Oriented Programming with Spring

Due to the proxy-based nature of Spring’s AOP framework, protected methods are by definition not intercepted, neither for JDK proxies (where this isn’t applicable) nor for CGLIB proxies (where this is technically possible but not recommendable for AOP purposes). As a consequence, any given pointcut will be matched against public methods only!

If your interception needs include protected/private methods or even constructors, consider the use of Spring-driven native AspectJ weaving instead of Spring’s proxy-based AOP framework. This constitutes a different mode of AOP usage with different characteristics, so be sure to make yourself familiar with weaving first before making a decision.

转载注明原文:spring – 带注释的PRIVATE方法的AspectJ切入点 - 代码日志