如何在Springboot中将字段自动装配到aspectj切面中?

问题描述 投票:0回答:1

我有一个 Springboot 服务。我正在使用 Aspectj AOP 进行访问控制。我有一个方面类 AuthorizationAspect ,其中包含带有一些访问控制方法的自动装配字段。自动装配字段始终为空。

方面类:

@Aspect
public class AuthorizationAspect {

    @Autowired
    private UserService userService;

    @Around(
        "execution(* some.controller.Method(..))"
    )
    public ResponseEntity<?> checkIfAdmin(ProceedingJoinPoint joinPoint) throws Throwable {
        // do something with userService
    }
...
}

userService 字段始终为空。

我尝试将

@Configurable(autowire = Autowire.BY_TYPE)
添加到 Aspect 类并将
<bean id="authorizationAspect" class="com.example.accesscontrol.AuthorizationAspect" factory-method="aspectOf"></bean>
添加到 beans.xml,但似乎没有任何效果。

如何解决这个问题?

MCVE:https://github.com/ajones239/SO-MCVE-76996582

java spring spring-boot dependency-injection aspectj
1个回答
0
投票

感谢您的MCVE。这是了解您的情况的关键。我向您发送了一个 pull request 解决问题。

基本上,您需要遵循 Spring 手册章节 使用 AspectJ 通过 Spring 进行依赖注入域对象,并在本机方面使用

@Configurable
,在 Spring 应用程序上使用
@EnableSpringConfigured
。最后但并非最不重要的一点是,您需要一个原生方面的工厂方法,以便 Spring 知道它:

@Bean
public AuthorizationAspect authorizationAspect() {
  return Aspects.aspectOf(AuthorizationAspect.class);
}

我的 PR 的重要承诺是 acb5da67

© www.soinside.com 2019 - 2024. All rights reserved.