<code>/**<br> * spring debug<br> * @author huangfu<br> */<br>public class SpringDebug {<br>public static void main(String[] args) {<br> AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(SpringDebugConfig.class);<br> }<br>}<br></code>
로그인 후 복사
위 코드 줄은 Spring을 사용해 본 사람이라면 누구나 매우 익숙할 것으로 추정됩니다. 그렇지 않다면 먼저 사용법을 배우는 것이 좋습니다. , 그리고 몇 가지 소스 코드를 탐구합니다. 기본 논리!
Bean을 단계별로 인스턴스화하고, Bean을 인수한 후, 다양한 Life Cycle 클래스를 실행하는 방법을 살펴보겠습니다! 먼저 추측해 보겠습니다. Spring이 이러한 Bean을 읽을 때 Bean에 대한 정보는 특정 엔터티에 저장되어야 합니다. 이 클래스는 BeanDefinition인데 무엇을 저장하나요? 하위 클래스 AbstractBeanDefinitionBeanDefinition那么他存储了什么东西呢?我们看一下它的子类AbstractBeanDefinition
이와 비슷한 속성값을 정의하고 있습니다. 물론 작성자가 몇 가지 속성을 가로채서 훨씬 더 많은 속성이 있습니다. 그 목적은 Bean이 인스턴스화될 때 필요한 데이터를 직접 가져올 필요가 없으며 대신 Spring 초기화 중에 여기에서 가져올 수 있다는 것입니다. 필요합니다. bd의 개념을 이해하십시오. 그러면 우리는 궁금합니까? 읽은 후 어디에 저장되나요? 대답은 그것을 beanFactory에 저장하는 것이므로 Spring은 초기화할 때 반드시 먼저 bean 팩토리를 구현할 것입니다! AnnotationConfigApplicationContext를 입력하면 초기화되지 않은 것을 확인할 수 있습니다. 우리 모두 알고 있듯이 클래스가 다시 초기화되면 상위 클래스의 생성자가 먼저 로드되므로 해당 상위 클래스 GenericApplicationContext를 살펴봐야 합니다.
rrreee
예상대로, 그것은 상위 클래스입니다. Bean 팩토리가 내부에 생성되고 팩토리가 거기에 있습니다. 계속해서 AnnotationConfigApplicationContext로 돌아가서 살펴보겠습니다. 이것이 호출되었음을 나타내는 this()를 호출하는 것을 발견합니다. 자체 빈 생성자이므로 입력합니다. 살펴보세요:
rrreee
"이 시점에서 위 그림을 볼 수 있습니다. 초기화 중에 Bean 팩토리가 있습니다."
"그러면 비어있는 리더가 생성 방법으로 초기화됩니다! 》
2. 핵심 기능 좋습니다. 더 나아가면 해당 패키지 아래의 클래스를 스캔하여 Bean으로 변환할 것임을 알게 됩니다. 그런 다음 계속해서 refresh()로 이동합니다. ;이 방법은 전체 Springbean 초기화의 핵심 방법입니다. 이를 이해하면 Spring의 인스턴스화, 콜백 및 기타 문제를 이해할 수 있습니다.
메소드가 수행하는 기능을 분석하기 위한 첫 번째 방법은 다음과 같습니다.
1) prepareRefresh();❝ 🎜다음은 주로 여러 속성에 대한 Bean 팩토리를 새로 고치기 전 일련의 할당 작업입니다. 앞서 생성한 Spring 팩토리가 비어 있는 경우, 이 방법은 그를 위해 일련의 초기화 값 작업을 수행하는 것입니다! ' ' s ' s 1 그래서 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 너무 so so so so so so so so so so so so... 한 번만 새로 고쳐지고 오류는 여러 번 보고됩니다. 단계가 xml이면 새 팩토리가 반환됩니다. Bean 컨테이너를 생성하고 반환하려면 일반적으로 BeanPostProcessor라고 하는 beanFactory에 자체 내장 Bean 후처리기 중 일부를 등록하세요.❞ postProcessBeanFactory(beanFactory); 빈 메소드는 무엇을 의미하나요? 이는 Spring 개발자가 호출자가 사용자 정의 확장을 사용하기를 원한다는 것을 의미합니다! Ni i). InvokebeanFactoryPostProcessors (Beanfactory);
❝
실제로 이름을 믿으면 대부분의 독자는 그의 목적이 구성되지 않은 클래스의 BD 등록을 모든 BeanFactoryPostProcessors로 스캔하는 것이라고 추측할 수 있습니다. >, 첫 번째 확장 지점이 여기에 나타납니다. BeanFactoryPostProcessors를 사용자 정의할 때 콜백 타이밍은 Spring이 모든 BeanDefinition을 읽는 시점입니다. 독자는 특정 사용 방법에 대해 Baidu를 참조할 수 있습니다. * beanPostProcessor 인터페이스의 확장점을 사용해 본 적이 있는지 궁금하십니까? 물론 이 방법으로 Spring 팩토리에 등록되지만, 등록만 되고 실행되지는 않는다는 점에 유의하세요! 기억은 실행되지 않습니다!
적 적 적 적 적 적 적 적 은 일반적으로 이벤트 프로그래밍을 위해 캡슐화됩니다. 이벤트 게시), 이벤트 리스너(이벤트 수신), 이벤트 소스(특정 이벤트 정보) 세 가지 역할로 나누어집니다. 이 메서드의 목적은 초기화하는 것입니다. 이벤트 방송인! 9).
❝ 여기에 또 다른 확장 지점이 있습니다. Spring은 이를 인식하지 못하지만 공급자는 실현됩니다. . 10).Registerlistener(); ❝ 등록된 Spring 이벤트 모니터입니다. 11) FinishbeanFactoryinitialization(BeanFactory); 중요한 점은 나머지(지연 초기화가 아닌) 싱글톤을 모두 인스턴스화하는 것입니다. Bean 인스턴스화, 주입, 순환 종속성 해결, beanPostProcessor 콜백 및 기타 작업이 모두 여기에 구현됩니다! ❞ ..finishRefresh(),. 봄 내장 이벤트 ❞ 🎜🎜🎜🎜🎜🎜
위 내용은 Java의 Spring 소스 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!