繁体   English   中英

如何在非Spring的构造型类中使用@Autowired

[英]How to use @Autowired in not Spring's stereotype classes

我想在此类中使用该存储库,但是当我放置类似@Component的构造型时,会从IDE中收到错误消息:

无法自动接线。 找不到“身份验证”类型的bean。

public class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {

    @Autowired
    private FlatRepository flatRepository;

    public CustomMethodSecurityExpressionRoot(Authentication authentication) {
        super(authentication);
     }
}

您不能在SecurityExpressionRoot内使用@Autowire
但是,您可以手动提供FlatRepository依赖项。

@Configuration类内配置Security对象时,可以在其中@Autowire任何实例。

只需在CustomMethodSecurityExpressionRoot构造函数中为该新依赖项腾出空间

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);

要使用Bean的自动装配实例,您需要使用该实例的组件/服务也要由Spring进行管理。 因此,为了使用存储库,您需要对CustomMethodSecurityExpressionRoot类进行扩展。 您可以使用@Component / @Service注释对类进行注释,并通过组件扫描对其进行选择,或者使用Java或XML配置来配置bean。

如果“ Springify” CustomMethodSecurityExpressionRoot,则需要确保Spring对象上下文可以访问Authentication对象。 这就是为什么您收到无法找到身份验证的错误的原因。 您还需要使用Java或XML创建Authentication类型的Bean。

请检查官方文档以了解如何定义spring bean:

https://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch02s02.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM