Ответ
После создания и внедрения зависимостей (dependency injection) бина в Spring вызывается его метод инициализации. Есть два основных способа его определить:
-
Аннотация
@PostConstruct(предпочтительный способ):import javax.annotation.PostConstruct; @Component public class DatabaseService { @PostConstruct public void init() { // Выполняется после инъекции всех зависимостей System.out.println("Bean is ready for use."); // Здесь обычно: загрузка кэша, проверка конфигурации, открытие соединений } }Почему предпочтительнее: Это стандарт JSR-250, который не привязывает ваш код к Spring API.
-
Реализация интерфейса
InitializingBean:import org.springframework.beans.factory.InitializingBean; @Component public class CacheManager implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { // Аналогично @PostConstruct this.loadCache(); } }
Порядок вызова: Конструктор -> Внедрение зависимостей (@Autowired) -> @PostConstruct / afterPropertiesSet().
Ответ 18+ 🔞
А, слушай, ну это ж классика, блядь! Ты создал свой бин, зависимости ему впендюрили, и что дальше? А дальше-то ему, сука, инициализироваться надо! Как человек утром кофе выпивает, чтобы в себя прийти.
Вот смотри, есть два главных способа этому бину сказать: «Проснись и пиздуй!», то есть выполнить стартовый код.
Первый способ — @PostConstruct (это типа золотой стандарт, его все любят):
import javax.annotation.PostConstruct;
@Component
public class DatabaseService {
@PostConstruct
public void init() {
// Выполняется, когда все зависимости уже впихнули
System.out.println("Bean is ready for use.");
// Тут обычно: загрузка кэша, проверка конфигурации, открытие соединений
}
}
Почему он такой всеми любимый, этот @PostConstruct? Да потому что он, блядь, от JSR-250, стандартный такой! Твой код не привязан к спрингу намертво, как будто сваркой прихвачен. Чистота, блядь, элегантность!
Второй способ — через интерфейс InitializingBean (более старый, спринговый):
import org.springframework.beans.factory.InitializingBean;
@Component
public class CacheManager implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
// Делает то же самое, что и @PostConstruct
this.loadCache();
}
}
Работает, конечно, но это уже прям признание в любви к Spring API. Как будто татуировку «I ♥ Spring» набил.
И главное, запомни порядок, ёпта, а то запутаешься:
- Конструктор — только родился, ещё нихуя не понимает.
- Внедрение зависимостей (
@Autowired) — вот тебе, дружок, все твои поля, на, держи. @PostConstruct/afterPropertiesSet()— а вот теперь, сука, когда всё есть, можно и дела делать! Загрузить кэш, проверить конфиги, подключиться куда надо. Полный порядок, блядь!
Вот так вот, просто и без подвоха. Выбирай первый способ и живи спокойно.