簡體   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