Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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
Spring 方面未运行|弹簧启动_Spring_Spring Boot_Spring Webflux_Spring Aop - Fatal编程技术网

Spring 方面未运行|弹簧启动

Spring 方面未运行|弹簧启动,spring,spring-boot,spring-webflux,spring-aop,Spring,Spring Boot,Spring Webflux,Spring Aop,我已经编写了一个jar,其中包含一个方面,请在下面查找类和xml:- package com.foo.bar; @目标(ElementType.METHOD) @保留(RetentionPolicy.RUNTIME) 公共@接口APILock{ int lockamostfor(); int lockAtLeastFor()默认值为0; } package com.foo.bar.aspect; @面貌 @组成部分 @Slf4j 公共类方面{ @周围(“@annotation(com.foo.

我已经编写了一个jar,其中包含一个方面,请在下面查找类和xml:-

package com.foo.bar;
@目标(ElementType.METHOD)
@保留(RetentionPolicy.RUNTIME)
公共@接口APILock{
int lockamostfor();
int lockAtLeastFor()默认值为0;
}
package com.foo.bar.aspect;
@面貌
@组成部分
@Slf4j
公共类方面{
@周围(“@annotation(com.foo.bar.APILock)”)
公共对象logExecutionTime(ProceedingJoinPoint joinPoint)抛出可丢弃{
System.out.println(“内部外观”);
joinPoint.procedure();
}
}
spring引导aop依赖项


org.springframework.boot
弹簧启动机aop
以及其他弹簧webflux启动器

我在另一个引导应用程序中使用这个jar作为依赖项,请参见下面我的引导应用程序:-

package com.bla.application;

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
@SpringBootApplication
@ComponentScan(basePackages = {"com.foo.bar","com.bla"})
public class ReactiveApplication {

    public static void main(String[] args) {
        SpringApplication.run(ReactiveApplication.class, args);
        System.out.println("--------STARTED------------");
    }
}
package com.bla.service;
@服务
公共级城市服务{
@自动连线
私人城市储蓄所城市储蓄所;
公共交通部门(员工){
return cityRepository.findAll();
}
@APILock(LockAtlastFor=30,lockAtMostFor=60)
公共单声道更新(城市,APILockKey){
试一试{
return cityRepository.save(城市);
}捕获(例外e){
返回单声道错误(e);
}
}
}

但是当我点击我的更新请求时,它不是在执行我的方面(APILockAspect),而是直接执行服务逻辑,有人能帮我找到我做错了什么吗?

看起来你做的一切都是对的,但仍然不起作用,所以请检查以下内容(本应作为评论而不是回答,但内容太多,所以总比什么都没有好:):

  • 确保带有方面的jar本身不是spring boot应用程序(转到目标文件夹,查看maven/gradle在此jar中创建的工件是否包含
    boot-INF
    文件夹之类的内容。这是因为您无法使一个spring boot应用程序依赖于另一个

  • 确保在启动期间spring能够识别该方面:添加一个无操作构造函数并从该方面记录一些内容/放置一个断点


  • 感谢Mark B,它得到了解决,实际上在我的项目中有两个APILock注释,在两个不同的包中(我的坏),在我的方面,我指的是错误的APILock包。

    如何获得
    CityService
    的实例和
    updateCity()
    方法触发?有一个控制器是自动连接cityService,并且从该控制器调用updateCity。我想不出其他情况。正如Mark在回答中指出的,请确认Aspect bean是否是在启动期间创建的。您的
    @Around
    建议不会返回任何内容。它甚至不应该编译。(发布伪代码不是特别有用。)如果不希望更改目标方法的原始结果,只需使用
    返回joinPoint.continue();