#java #spring-boot #postconstruct
Вопрос:
У меня есть класс Banana
, в котором есть @PostConstruct
метод, который я хочу запустить после создания объекта класса. Я создаю объект этого класса, используя эти вызовы
Cat cat = new Cat(); Banana b = new Banana(cat);
Итак, из журналов я понимаю, что этот @PostConstruct
метод не вызывается при создании Banana
объекта. Я думаю, что то, как я реализовал, не является правильным использованием. Может ли кто-нибудь подсказать мне, как правильно это реализовать, поскольку это моя первая задача в проекте Java с загрузкой Spring. Мне нужен этот установочный код для запуска после Banana
создания объекта, так что есть ли какой-либо другой способ, кроме @PostConstruct
@Slf4j public class Banana { public Banana(Cat cat) { this.cat = cat; } private Cat cat; @PostConstruct public void setup() { // some code } public void execute() { // some code } }
Ответ №1:
Все аннотации, отмеченные spring ( @PostConstruct
, @PreDestroy
, @Autowired
и многие другие), применимы, когда объект создается самой spring. В этом случае spring может анализировать класс, обрабатывать аннотации и т. Д.
Когда вы создаете экземпляр самостоятельно ( new Banana()
) — spring даже не знает, что ваш объект существует, и, следовательно, не может вызвать ни один из его методов, поэтому вы вынуждены делать это самостоятельно. Так что да, в этом случае вам придется вызывать метод с аннотацией @PostConstruct
вручную, а это значит, что @PostConstruct
аннотацию довольно бесполезно можно вообще опустить.
Ответ №2:
@PostConstruct
Аннотация используется для метода, который необходимо выполнить после внедрения зависимостей, чтобы выполнить любую инициализацию. Этот метод будет вызываться платформой, только если платформа управляет созданием объекта.
Так как вы создаете экземпляр Banana
вручную, вы также должны вызвать его вручную.