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

标签 java spring spring-boot inversion-of-control

我想在此类中使用该存储库,但是当我放置 @Component 之类的构造型时,我从 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 依赖项。

当您在 @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;
    }

    ...
}

并在实例化点手动注入(inject)

final SecurityExpressionRoot root = new CustomMethodSecurityExpressionRoot(authentication, flatRepository);

关于java - 如何在非Spring的构造型类中使用@Autowired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55195769/

相关文章:

java - 运行 JAR(Fxyz3d 库)时出现 FileSystemNotFoundException

spring - 当 Spring 无法验证模型的 java.util.Date 字段时,如何显示用户友好的错误?

java - 使用 Spring-Boot 和 Jetty 设置 SSL

java - 异常 : java. lang.IllegalArgumentException : Pointcut is not well-formed Error?

java - Spring @Transactional 注释使我的类无法 Autowiring

java - 如何为 Spring Boot 2 创建自定义嵌入式 servlet 容器

spring-boot - Flyway 在尝试连接到 GCP SQL 时抛出异常 "HikariPool-1 Connection is not available"

java - 如何进行(递归?)自定义反序列化

java - 如何确定这道题的最佳后置条件?

java - 使用 EasyMock + PowerMock 时如何设置 void 方法的期望调用次数?