Предисловие
Весенний контейнер МОК очень мощный, ответственный за создание и управление бобами весны и другие функции. Весенние бобы являются важной частью всего весеннего применения. Понимание жизненного цикла весенних бобов поможет нам понять всю весеннюю структуру.
BeanFactory и ApplicationContext - два важных контейнера пружины. Первый обеспечивает самую основную поддержку для инъекции зависимостей, в то время как последний расширяет свои функции на основе наследства первого, таких как добавление таких функций, как распространение событий, доступ к ресурсам и доход до международного сообщества. Эта статья в основном представляет жизненный цикл бобов в двух контейнерах ApplicationContext и BeanFactory.
Сначала посмотрите на таблицу жизненного цикла:
Давайте поговорим о жизненном цикле, прежде чем мы поговорим об этом:
Весна только помогает нам управлять полным жизненным циклом синглтонских модельных бобов. Для прототипов бобов Spring больше не будет управлять последующими жизненными циклами после того, как они созданы и переданы пользователю.
Метод аннотации
При инициализации бобов есть несколько этапов. Во -первых, вы можете использовать аннотацию @postconstruct и @predestroy, чтобы назвать это на стадии создания и разрушения в бобах:
@Componentpublic class annotationbean {private final Static Logger logger = loggerFactory.getLogger (AnnotationBean.class); @Postconstruct public void start () {logger.info ("annotationbean start"); } @Predestroy public void destress () {logger.info ("AnnotationBean Dressement"); }}Инициализация, одноразовый интерфейс
Вы также можете реализовать два интерфейса инициализации и одноразовых, которые также называются на этапах инициализации и разрушения:
@ServicePublic Class SpringLifeCycleservice реализует инициализируемость, issosableBean {Private Final Static Logger logger = loggerFactory.getLogger (SpringLifeCycleservice.class); @Override public void efpropertiesset () бросает исключение {logger.info ("Springlifecycleservice Start"); } @Override public void destress () бросает исключение {logger.info ("SpringlifeCycleservice Disploy"); }}Пользовательские методы инициализации и разрушения
Вы также можете настроить методы вызова во время этапов инициализации и разрушения:
@ConfigurationPublic Class LifeCycleConfig {@bean (initmethod = "start", destroymethod = "destress") public springlifecycle create () {springlifecycle springlifecycle = new Springlifecycle (); вернуть весеннийлифуцикл; / public void start () {logger.info ("Springlifecycle Start"); } public void destress () {logger.info ("Springlifecycle Destress"); }}Приведенное выше настроено в Springboot таким образом, и его также можно использовать, если он основан на XML на основе XML:
<bean init-method = "start" Drouse-method = "Drouse"> </bean>
Чтобы достичь того же эффекта.
Реализовать *осведомленное интерфейс
*Осознательный интерфейс может использоваться для получения некоторых объектов весной при инициализации бобов, таких как получение контекста пружины.
@Componentpublic class springlifecycleaware реализует ApplicationContextaware {private final Static Logger = loggerFactory.getLogger (SpringLifeCycleAware.class); Private ApplicationContext ApplicationContext; @Override public void setApplicationContext (ApplicationContext ApplicationContext) Throws BeanSexception {this.ApplicationContext = ApplicationContext; Logger.info ("Springlifecycleaware Start"); }}Таким образом, метод SetApplicationContext будет вызван при инициализации бобов SpringLifeCycleAware и может быть получена объект ApplicationContext.
Beanpostprocessor Enhanced Rocessor
Реализуйте интерфейс BeanpostProcessor. Все бобы весной будут вызывать два метода в интерфейсе при инициализации, которые можно использовать для обработки некоторых специальных бобов:
@Componentpublic class springlifecycleprocessor реализует Beanpostprocessor {private final Static Logger logger = loggerFactory.getLogger (Springlifecycleprocessor.class); / ** * Прозвучал перед предварительной инициализацией * @param bean * @param beanname * @return * @throws beansexception */ @override public Object postprocessbefeinitialization (Object Bean, String Beanname) бросает Beansexception {if ("Annotationbean" .equals (beanname)) {logger.infecesser beanname = {} ", beanname); } return Bean; } / ** * Пост-инициализация инициализации бобов Полное вызов * @param bean * @param beanname * @return * @throhs beansexception * / @override postprocessafterinitialization (объект Bean, String beanname) throws {if ("annotationbebe". Logger.info ("springlifecycleprocessor end beanname = {}", beanname); } return Bean; }}Результаты наблюдения после исполнения:
018-03-21 00:40:24.856 [restartedMain] INFO ccspSpringLifeCycleProcessor - SpringLifeCycleProcessor start beanName=annotationBean2018-03-21 00:40:24.860 [restartedMain] INFO ccspring.annotation.AnnotationBean - AnnotationBean start2018-03-21 00: 40: 24.861 [RestartEdMain] Информация CCSPSPringLifeCycleProcessor-SpringLifeCycleProcessor End Beanname = Annotationbean2018-03-21 00: 40: 24.864 [RestartedMain] Info Ccsaware.springlifecycleaware-Springlifcycleaware. 00: 40: 24.867 [RestartEdmain] Info Ccspring.springlifecleservice-Springlifecycleservice start2018-03-21 00: 40: 24.887 [RestartedMain] Info Ccspring.springlifecycle-Springlifecycle start2018-03-03-21: 4012.02.012 [25.012 [25.012 [25.012 [25.012 [25.012 [4012 [40111112.012 [restrail OsbDaoPtionAlliverElaudServer-Severeload Server работает на порте 357292018-03-21 00: 40: 25.122 Заявление за 2,309 секунды (JVM, работающая для 3,681) 2018-03-21 00: 40: 25.143 org.springframework.context.annotation.annotationConfigApplicationContext@3913Adad: дата запуска [Ср 21 марта 00:40:23 CST 2018]; root of context hierarchy2018-03-21 00:40:25.155 [Thread-8] INFO osjeaAnnotationMBeanExporter - Unregistering JMX-exposed beans on shutdown2018-03-21 00:40:25.156 [Thread-8] INFO ccspring.SpringLifeCycle - SpringLifeCycle destroy2018-03-21 00: 40: 25.156 [Thread-8] Info ccservice.springlifecleservice-Springlifecycleservice destress2018-03-21 00: 40: 25.156 [Thread-8] Info ccspring.annotation.annotationbean
До тех пор, пока весенний контекст не будет разрушен, будет вызван метод Unful Dissult и метод Destress (), который реализует одноразовый подготовка.
Суммировать
Вышеуказанное - жизненный цикл Spring Bean, представленный редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!