如何在非 Spring 的构造型类中使用 @Autowired
我想在这个类中使用那个存储库,但是当我放置一个像@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:
无法自动装配.未找到身份验证"类型的 bean.
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);