Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么AOP在我的Spring Boot应用程序中不起作用?_Spring_Spring Boot_Aspectj_Spring Aop - Fatal编程技术网

为什么AOP在我的Spring Boot应用程序中不起作用?

为什么AOP在我的Spring Boot应用程序中不起作用?,spring,spring-boot,aspectj,spring-aop,Spring,Spring Boot,Aspectj,Spring Aop,我试图将AspectJ添加到我的一个Spring Boot项目中,但失败了。我试图创建一个非常简单的SpringBoot项目,但它也不起作用。我已经添加了@enableSpectRoxy注释等,但仍然得到了相同的结果。我做错了什么 这是这个简单项目的代码: @SpringBootApplication @EnableAspectJAutoProxy(proxyTargetClass = true) public class DemoApplication { public static

我试图将AspectJ添加到我的一个Spring Boot项目中,但失败了。我试图创建一个非常简单的SpringBoot项目,但它也不起作用。我已经添加了@enableSpectRoxy注释等,但仍然得到了相同的结果。我做错了什么

这是这个简单项目的代码:

@SpringBootApplication
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}


@Aspect
@Component
public class MessageAspect {   

    @Before("execution(* com.example.demo.MessageController.mainMethod())")
    public void beforeMethod() {
        System.out.println("before method");
    }   

}


@RestController
public class MessageController {

    @RequestMapping(value = "/")
    public String mainMethod() {
        return "result from mainMethod";
    }

}
Maven依赖项:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧启动机aop

我认为这些对您有帮助:

  • 您忘记添加方面类的bean:
  • 使用
    @enableAspectProxy
    而不使用
    (proxyTargetClass=true)

  • 确保已扫描您的
    @Aspect
    注释。您可以使用
    @ComponentScan(“myAspectPackageContainer.*)

  • 当使用
    @Aspect
    时,您不再需要
    @Component
    注释

  • 在表达式中使用方法修饰符执行(public*com.example.demo…
  • 在表达式末尾使用
    “myPackage.*.*(..)”
  • 检查以下两个依赖项:

org.aspectj
aspectjrt
1.8.7
org.aspectj
aspectjweaver
1.8.7

顺便说一句,如果您只需要显示控制器类,您可以使用
@ControllerAdvice
删除
@Component
注释在这种情况下帮助了我。

尝试在main方法()中添加两个
如下所示:
com.example.demo.MessageController.main方法(…)
然后看看它是否有效。另外,尝试在spring配置中将aspect类声明为bean,看看这是否有什么不同。我的aspect类不是作为bean自动连接的。问题在于文件扩展名。我创建了一个扩展名为.aj的aspect,但忘记了它(IDEA隐藏扩展名).当我将扩展名改为.java时,一切都开始正常工作。@V.Perfilev你救了我一天
@Bean MessageAspect messageAspect() {  
  return new MessageAspect();
}
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.8.7</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.7</version>
</dependency>