초기화 바에있는 인터페이스는 콩의 메소드를 초기화하는 방법을 제공합니다. AfterPropertiesset 방법 만 포함합니다. 인터페이스를 상속하는 클래스는 Bean을 초기화 할 때 메소드를 실행합니다.
다음과 같이 테스트 :
import org.springframework.beans.factory.initializingbean; public class testinitializingbean 초기화 {@override public void afterProperTiesset () 예외 {system.out.println ( "CESHI 초기화 비안"); } public void testinit () {System.out.println ( "Ceshi init-method"); }}구성 파일
<bean id = "testinitializingBean"> </bean>
주요 기능은 다음과 같습니다
public class main {public static void main (String [] args) {ApplicationContext context = new FileSystemxMlApplicationContext ( "/src/main/java/com/beans.xml"); }}테스트 결과는 다음과 같습니다.
Ceshi 초기화 비안
즉, Spring이 Bean을 초기화 할 때 Bean이 초기형 인터페이스를 구현하면 AfterProperTiesset 메소드가 자동으로 호출됩니다.
따라서 문제는 Bean을 구성 할 때 Init-Method 구성을 사용하여 Bean의 초기화 방법을 구성 할 수도 있다는 것입니다. 이 두 가지 중 어느 것이 먼저 실행됩니까? 다음으로 테스트하고 구성 파일을 수정 한 다음 init-method를 추가하십시오.
<bean id = "testinitializingbean"init-method = "testinit"> </bean>
프로그램을 실행하고 결과를 얻으십시오.
Ceshi 초기화 비안
Ceshi init-method
결과에서 Spring이 Bean을 초기화 할 때 Bean이 초기화 비 인터페이스를 구현하고 구성 파일에서 init-method를 지정하면 시스템은 먼저 AfterPropertieset () 메소드를 호출 한 다음 Init-Method에 지정된 메소드를 호출 함을 알 수 있습니다.
그렇다면이 방법은 봄에 어떻게 구현됩니까? 스프링 로딩 콩의 소스 코드 클래스를 살펴보면 미스터리를 볼 수 있습니다. AbstractAutowiredCapableBeanFactory 클래스의 InvokeInitMethods는 다음과 같이 매우 명확합니다.
보호 된 void invokeInitMethods (String Beanname, Final Object Bean, RootBeendefinition MBD)는 던질 수있는 {// Bean이 초기화 비 인터페이스를 구현했는지 여부를 판단합니다. 초기화 비면 인터페이스가 구현되면 Bean의 후 프로 테티 세트 방법 만 부울 isinitializingBean = (Bean instancefor instercizingBean)라고합니다. if (isinitializingbean && (mbd == null ||! mbd.isexternallyManageDinitMethod ( "afterProperTiesset"))) {if (logger.isdebugenabled ()) {logger.debug ( "이름이있는 후 만기 ProperTiesset () + beanam +" "); } if (system.getSecurityManager ()! = null) {try {accessController.doprivileged (new verilegeDexceptionAction <bottry> () {public Object Run () 예외 {// afterProperTiesset ((초기화) bean) .AfTROPERTIESSET (); return null (return})}}}}}}}; } catch (privilegedActionException pae) {strow pae.getexception (); }} else {// foftProperTiesset ((초기화) bean)를 직접 호출합니다. }}} if (mbd! = null) {String initMethodName = mbd.getInitMethodName (); // init-method 메소드가 지정되어 있는지 여부를 구별합니다. Init-Method 메소드가 지정되면, 확립 된이 시작 If (initmethodname! = null &&! 초기 방법 방법은 invokecustominitmethod (beanname, bean, mbd)를 구현하는 것입니다. }}}요약 :
1. Spring은 Bean에 Beans를 초기화하고 초기화 비 인터페이스를 구현하거나 AfterProperTiesset 메소드를 구현하거나 구성 파일의 Init-Method를 통해 지정하는 두 가지 방법을 제공합니다. 두 방법 모두 동시에 사용할 수 있습니다.
2. 초기화 비면 인터페이스 구현은 후 프로 테티 세트 메소드를 직접 호출합니다.이 방법은 반사를 통해 init-method에 의해 지정된 메소드를 호출하는 것보다 조금 더 효율적이지만, 초기 방법은 스프링의 의존성을 제거합니다.
3. AfterProperTiesset 메소드를 호출 할 때 오류가 발생하면 Init-Method에 의해 지정된 메소드가 호출되지 않습니다.
봄 초기화의 역할
Spring의 초기화 비 인터페이스는 매우 유용합니다. 봄 콩에 위치하고 있습니다. afterProperTiesset () 하나만 제공합니다. 이 방법을 구현하면 Spring은 프레임 워크 수준 지원을 제공합니다. Sring 컨테이너를 통해 인터페이스를 구현하는 클래스 인스턴스를 생성하면 AfterProperTiesset 메서드를 호출합니다. 이 방법을 통해 콩이 올바르게 초기화되어 있는지 확인할 수 있습니다. 물론, 초 모드 메소드를 사용할 수도 있습니다. 이 두 가지 방법은 동시에 사용될 수 있으며 통화 순서는 초보자입니다.
요약
위는 편집자가 소개 한 봄에 초기화 비 인터페이스를 사용하는 것입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!