Сбой внедрения зависимостей Springboot в спящем объекте - PullRequest
0 голосов
/ 14 марта 2019

У меня возникла странная проблема. Мне нужно внедрить зависимость Spring Managed в класс Entity, который я пробовал, но зависимость null, что я делаю неправильно, не могу понять.

У меня есть зависимость от служебного класса, который помечен как компонент, и я могу получить к нему доступ из контроллера формы и класса обслуживания, но не в сущности. Мне не хватает некоторых jar-файлов, о которых я не знаю, потому что это подпружиненная загрузка? вот код:

@Table
@Entity
@DiscriminatorValue("3")
@Component
public class LoginBot extends Bot implements Serializable {
    private static final long serialVersionUID = 1L;
    public LoginBot() {}

    @Autowired
    SelUtil util;

    @Override
    public Map<String, Object> test() {
        Map<String, Object> returnMap=new HashMap<>();
        util.selectBrowserAndPlatform(this);
        return returnMap;
    }
}

Ответы [ 3 ]

1 голос
/ 14 марта 2019

AFAIK Spring не выполняет постобработку классов сущностей, поэтому он не будет ничего связывать автоматически, сущности не являются бинами контекста пружины, а также помещение некоторого класса util в бин сущности - это действительно плохая практика.Если вам действительно нужно использовать некоторые утилиты, может быть, просто добавьте в них статические методы?

0 голосов
/ 15 марта 2019

Да, пока это невозможно. Но есть патч, работающий с помощью Spring с добавлением дополнительного слоя класса Service между dao и контроллером, который работал для меня. Я сделал некоторые изменения:

  1. добавлена ​​@Transient аннотация в переменной-члене в Bot class(super class), так что child получит ее в любом случае и добавит абстрактный метод, который также test().
  2. Добавлен интерфейс службы BotRepoCustom, который имеет метод Bot getBotWithTransientFields(Long id);
  3. Реализация этого класса обслуживания BotRepoCustomImpl

Теперь, когда я получаю бота с зависимостью Spring с классом BotRepoCustomImpl, я могу использовать его напрямую. На данный момент патч работает и нет статических методов. Если вам нужен рабочий код, я могу его предоставить.

0 голосов
/ 14 марта 2019

Объекты не являются бобами Spring, создание не управляется контейнером Spring. Они созданы постоянным провайдером. Вы не можете использовать здесь аннотацию для автопроводов и компонентов.

Добавление SelUtil к сущности означает, что вы хотите сохранить ее. Это действительно так?

...