首页 > 解决方案 > 为什么 List.add() 方法的方面不起作用?

问题描述

如何修复代码?方面编译但不工作。这样我就可以拦截list.add(new MyClass())方法并获取添加的对象?

@Component
public class AppField {

    List<MyClass> list = new ArrayList<>();

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext("com.index.aoptest.field");
        AppField bean = context.getBean(AppField.class);
        bean.addIntoList();
    }

    public void addIntoList() {
        // I want to intercept this method
        list.add(new MyClass());
    }
}
@Configuration
@EnableAspectJAutoProxy
public class ConfigField {
    @Bean
    public AspectField aspectField() {
        return new AspectField();
    }
}
@Aspect
public class AspectField {
//don't work
    @Pointcut("execution(boolean java.util.List.add(*)) && " +
            "args(param) && " +
            "within(com.index.aoptest.field.AppField)"
    )
    public void beforeSampleMethod(List<Object> param) {
    }

    @Before("beforeSampleMethod(param)")
    public void printMes(List<Object> param) {
        System.out.println(">>>>>>>>>>>>>>>>LOG>>>>>>>>>>>>>>>>");
    }
// don't work
    @Before("within(com.index.aoptest.field.AppField) && " +
            "execution(* java.util.List+.add(*)) && " +
            "args(obj)")
    public void allMethods(JoinPoint joinPoint, Object obj) {
        System.out.println("allMethods" + joinPoint.getSignature().getName());
    }
}

我写了这段代码,但我没有足够的使用 AOP 的经验

标签: aopaspect

解决方案


推荐阅读