如何在非Spring的构造型类中使用@Autowired [英] How to use @Autowired in not Spring's stereotype classes
问题描述
我想在此类中使用该存储库,但是当我放置类似@Component的构造型时,我会从IDE中收到错误消息:
I would like to use that repository in this class, but when I put a stereotype like @Component, I get an error from the IDE:
无法自动接线.找不到身份验证"类型的豆.
Could not autowire. No beans of 'Authentication' type found.
public class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {
@Autowired
private FlatRepository flatRepository;
public CustomMethodSecurityExpressionRoot(Authentication authentication) {
super(authentication);
}
}
推荐答案
在SecurityExpressionRoot
内不能@Autowire
.
但是,您可以手动提供FlatRepository
依赖项.
You cannot @Autowire
inside a SecurityExpressionRoot
.
You can however manually provide that FlatRepository
dependency.
在@Configuration
类中配置安全对象时,可以在其中@Autowire
所需的任何实例.
As you're configuring your Security objects inside a @Configuration
class, there you're able to @Autowire
any instance you need.
只需在CustomMethodSecurityExpressionRoot
构造函数中为该新依赖项腾出空间
Simply make space for that new dependency in CustomMethodSecurityExpressionRoot
constructor
class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot
implements MethodSecurityExpressionOperations {
private final FlatRepository flatRepository;
CustomMethodSecurityExpressionRoot(
final Authentication authentication,
final FlatRepository flatRepository) {
super(authentication);
this.flatRepository = flatRepository;
}
...
}
并在实例化点手动注入
final SecurityExpressionRoot root = new CustomMethodSecurityExpressionRoot(authentication, flatRepository);
这篇关于如何在非Spring的构造型类中使用@Autowired的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!