我有一个 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。这是了解您的情况的关键。我向您发送了一个 pull request 解决问题。
基本上,您需要遵循 Spring 手册章节 使用 AspectJ 通过 Spring 进行依赖注入域对象,并在本机方面使用
@Configurable
,在 Spring 应用程序上使用 @EnableSpringConfigured
。最后但并非最不重要的一点是,您需要一个原生方面的工厂方法,以便 Spring 知道它:
@Bean
public AuthorizationAspect authorizationAspect() {
return Aspects.aspectOf(AuthorizationAspect.class);
}
我的 PR 的重要承诺是 acb5da67。