Как использовать @Autowired в не стереотипных классах Spring - PullRequest
1 голос
/ 16 марта 2019

Я хотел бы использовать этот репозиторий в этом классе, но когда я ставлю такой стереотип, как @Component, я получаю сообщение об ошибке из IDE:

Не удалось выполнить автоматическое подключение.Бины типа «Аутентификация» не найдены.

public class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {

    @Autowired
    private FlatRepository flatRepository;

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

Ответы [ 2 ]

2 голосов
/ 16 марта 2019

Вы не можете @Autowire внутри SecurityExpressionRoot.
Однако вы можете вручную указать эту зависимость FlatRepository.

Когда вы настраиваете свои объекты безопасности внутри класса @Configuration, вы можете @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);
0 голосов
/ 16 марта 2019

Чтобы использовать экземпляр компонента с автосвязью, вам нужно, чтобы компонент / служба, использующий этот экземпляр, также управлялся Spring. Таким образом, чтобы использовать репозиторий, вам необходимо создать класс CustomMethodSecurityExpressionRoot. Либо вы аннотируете класс с помощью аннотации @Component / @Service и выбираете его с помощью сканирования компонентов, либо настраиваете компонент с использованием конфигурации Java или XML.

Если вы «Springify» CustomMethodSecurityExpressionRoot, то вам нужно убедиться, что объект Authentication доступен из контекста Spring приложения. Вот почему вы получаете ошибку, что Аутентификация не может быть найдена. Вам также потребуется создать bean-компонент типа Authentication в Java или XML.

Пожалуйста, ознакомьтесь с официальной документацией о том, как определить бобовые:

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

...