没有@Service @Controller,AOP不能切入点

时间:2018-03-23 08:18:46

标签: java spring spring-boot aop spring-aop

AOP可以像@Controller或@Service一样切入点。 但是如果没有spring的注释,它在Class上效果不佳。

package com.erp.module;
@Slf4j
public class SalesOrderModule {
    public void cancel(){
        log.info("test");
    }
    public static SalesOrderModule init(int type) {
        SalesOrderModule salesOrderModule = new SalesOrderModule(salesOrder); 
        *****
        return salesOrderModule;

我的Aspect.java如下

@Aspect
@Component
@Slf4j
public class WebLogAspect {

    @Pointcut("execution(public * com.erp.controller.*.*(..)) || execution(public * com.erp.module.*.*(..))")
    public void logPointCut() {
    }

我调用取消如下:

SalesOrderModule so = SalesOrderModule.init(3);
so.cancel();

我知道这个问题与代理相关。但我怎么能

1 个答案:

答案 0 :(得分:2)

Spring Docs says:

  

因此,例如,Spring Framework的AOP功能通常与Spring IoC容器一起使用。使用普通bean定义语法配置方面(尽管这允许强大的“自动代理”功能):这是与其他AOP实现的重要区别。使用Spring AOP时,您可以轻松或高效地执行某些操作,例如建议非常细粒度的对象(例如域对象):在这种情况下,AspectJ是最佳选择。但是,我们的经验是,Spring AOP为适合AOP的企业Java应用程序中的大多数问题提供了出色的解决方案。

因此,如果您需要拦截非Spring托管代码,则需要使用AspectJ而不是Spring AOP。 TBH,到目前为止我并不需要。