Интерфейс инициализирующих бобов обеспечивает способ инициализации методов для бобов. Это включает только метод Afterpropertiesset. Любой класс, который наследует интерфейс, выполнит метод при инициализации бобов.
Проверяется следующим образом:
Import org.springframework.beans.factory.initializebean; открытый класс TestinitializingBean реализует инициализацию bean {@Override public void efpropertiesset () выбрасывает исключение {System.out.println ("ceshi initiazingbean"); } public void testinit () {System.out.println ("ceshi init-method"); }}Файл конфигурации
<bean id = "testinitializebean"> </bean>
Основная функция заключается в следующем
открытый класс main {public static void main (string [] args) {ApplicationContext context = new FileSystemXmlApplicationContext ("/src/main/java/com/beans.xml"); }}Результаты теста:
Ceshi инициализируя Bean
Это означает, что когда Spring инициализирует бобы, если бобы реализуют интерфейс инициализируемого боя, метод Afterpropertiesset будет автоматически вызван.
Таким образом, проблема заключается в том, что при настройке бобов вы также можете настроить метод инициализации для фасоли, используя конфигурацию инициации Method. Какие из этих двух будут выполнены первыми? Далее, протестируйте его, измените файл конфигурации и добавьте init-method:
<bean id = "testinitializebean" init-method = "testinit"> </bean>
Запустите программу и получите результат:
Ceshi инициализируя Bean
Ceshi init-method
Из результатов мы видим, что когда пружина инициализирует бобы, если боб реализует интерфейс инициализируемого боя и определяет инициатор-метод в файле конфигурации, система сначала вызывает метод AfterPropertiesEt (), а затем вызывает метод, указанный в инициаторе Method.
Так как этот метод реализуется весной? Посмотрев на класс исходного кода пружинными бобами, вы можете увидеть загадку. Infokeinitmethods в классе AbstractautowiredCapableBeanFactory очень ясны, следующим образом:
Защищенная void inlokeinitMethods (String Beanname, Final Object Bean, Rootbeandefinition MBD) бросает {// Судья, реализовал ли боб интерфейс инициализируемого Bean. Если реализован интерфейс инициализируемой бобов, только метод Afterpropertiesset в бобах называется Boolean IsinitializingBean = (экземпляр Bean InstactizeBean); if (isInitializebean && (mbd == null ||! mbd.isexextallymanagedInitMethod ("efpropertiesset"))) {if (logger.isdebugenabled ()) {logger.debug ("envoking Afterpropertiesset () на Bean with '" + beanname + "") ")") ")") ")") ")") ")") " } if (System.getSecurityManager ()! = null) {try {accessController.doprivileged (new PrivilegedExceptionAction <Object> () {public Object run () Throws Exception {// Прямо вызовать AfterProperTiesset ((инициализируется) bean) .afterProperTiesset (); return null; } catch (privilegedActionException pae) {throw pae.getException (); }} else {// непосредственно вызовать AfterProperTiesset ((инициализация Bean) Bean) .afterPropertiesset (); }}} if (mbd! = null) {string initmethodname = mbd.getinitmethodname (); // различать, указан ли метод init-method. Если указан метод init-method, то установленная init-method if (initmethodname! = Null &&! (Isinitializebean && "efpropertiesset" .equals (initmethodname))) &&! Mbd.isexternallyAgenInitMethod (initMethodNam Метод заключается в реализации InvokeCustominitMethod (Beanname, Bean, MBD); }}}Суммировать:
1. Spring предоставляет бобы с двумя способами инициализации бобов, реализации интерфейса инициализируемого боя, реализации метода Afterpropertiesset или укажите его через init-method в файле конфигурации. Оба метода могут использоваться одновременно.
2. Реализация интерфейса инициализируемого борьбы непосредственно вызывает метод Afterpropertiesset, который немного более эффективен, чем вызов метода, указанного Init-Method, посредством отражения, но метод init-method устраняет зависимость от пружины.
3. Если при вызове метода Afterpropertiesset возникает ошибка, метод, указанный в Mithod init, не вызывается.
Роль пружинной инициализации
Инициализирующий интерфейс Spring очень полезен. Он расположен в весенних бобах. Он предоставляет только один метод Afterpropertiesset (). Когда вы реализуете этот метод, Spring предоставит вам поддержку на уровне структуры: когда вы создаете экземпляр класса, который реализует интерфейс через контейнер SRING, он вызовет метод AfterProperTiesset. С помощью этого метода вы можете проверить, правильно ли инициализируется ваш фасоль. Конечно, вы также можете использовать метод init-method. Эти два метода могут быть использованы одновременно, а порядок вызовов является инициатором.
Суммировать
Выше приведено использование интерфейса инициализируемого боязни весной, представленной вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!