1. 봄은 무엇을 할 수 있습니까?
Spring의 주요 목적은 J2EE를 사용하기 쉽고 훌륭한 프로그래밍 습관을 홍보하는 것입니다.
반전 제어 컨테이너 스프링의 디자인 핵심은 Javabeans와 함께 작동하도록 설계된 org.springframework.beans 패키지입니다. 이 패키지는 일반적으로 사용자가 직접 사용하지 않지만 더 많은 다른 기능 서비스의 기초가됩니다. 다음 상위 수준의 추상화는 "Bean Factory"입니다. Spring Bean Factory는 이름으로 물체를 검색하고 개체 간의 관계를 관리 할 수있는 일반적인 공장입니다. 콩 공장은 두 가지 객체 패턴을 지원합니다. 싱글 톤 :이 패턴에는 특정 이름의 공유 객체 인스턴스가 있으며, 찾을 때 검색됩니다. 이것은 기본값이며 가장 일반적으로 사용됩니다. 그것은 무국적 물체에 이상적인 패턴입니다. .prototype :이 모드에서는 페치를 얻을 때마다 별도의 객체가 생성됩니다.
2. 스프링 시작로드 및 구현 방법
첫 번째 : @PostConstruct 및 @PredEStroy 방법에 주석을 달아 Bean을 초기화하고 파괴하기 전에 작업을 구현합니다.
두 번째 유형 : XML에서 초기 방법 및 로토리 메드 메소드 정의
세 번째 유형 : 콩을 통한 초기화 및 일회용 비 인터페이스 구현
네 번째 유형 : BeanPostProcessor 인터페이스를 구현하기 위해 클래스를 작성하십시오. 이 인터페이스에는 두 가지 방법이 있습니다.
(1) : postprocessbebeforeinitialization 방법, 스프링에 정의 된 Bean이 스프링에 정의되기 전에 초기화되기 전에이 방법을 호출하십시오.
(2) : postprocessafterinitialization 방법, 스프링에 정의 된 Bean이 초기화되거나 초기화 된 후이 방법 또는 구현을 호출하십시오.
InstantiationAwareBeanPostProcessor는 BeanPostProcessor의 하위 인터페이스입니다
스프링 컨테이너가로드 된 후에 실행하십시오
스프링 리스너에서 항목으로.
org.springframework.web.context.contextloaderListener
스프링을 초기화하는 방법을 찾으십시오
/*** 루트 웹 응용 프로그램 컨텍스트를 초기화합니다. */ @override public void contextinitialized (servletcontextevent event) {initwebapplicationContext (event.getServletContext ()); }InitWebApplicationContext 메소드를 입력하십시오
if (this.context == null) {this.context = createWeBapplicationContext (servletContext); } if (this.context instancef configurableWebApplicationContext) {configurableWebApplicationContext cwac = (configurableWebApplicationContext) this.context; if (! cwac.isactive ()) {// 컨텍스트가 아직 새로 고쳐지지 않았습니다 -> // 부모 컨텍스트 설정, 응용 프로그램 컨텍스트 ID 등을 설정하는 등 (cwac.getParent () == null)와 같은 서비스 제공 {// 컨텍스트 인스턴스가 explicit parrent-> // root 웹 응용 프로그램에 대한 부모를 결정했습니다. ApplicationContext parent = loadParentContext (ServletContext); cwac.setparent (부모); } configureAndReshWebApplicationContext (CWAC, ServletContext); }} ApplicationListener
1. ApplicationListener를 구현하는 청취자 클래스를 작성하십시오.
import org.springframework.context.applicationlistener; import org.springframework.context.event.contextrefreshedevent; import org.springframework.stereotype.service; @servicepublic classuplistenerimplements apploylistener <@overridefreshedevent> @servicepublic classeplistenerimplements applic void. OnApplicationEvent (ConteXtRefreshedEvent event) {if (event.getApplicationContext (). getParent () == null) // 루트 응용 프로그램 컨텍스트에는 부모가없고, 그는 보스입니다. {// 실행 해야하는 논리 코드는 스프링 컨테이너가 초기화 된 후에 실행됩니다. System.out.println ( "/n/n/n/n/n/n ______________/n/n/n로드/n/n _________/n/n"); } // 또는 다음 메소드 if (event.getApplicationContext (). getDisplayName (). equals ( "root webApplicationContext")) {System.out.println ( "/n/n/n ________/n/n/n/n/n/n/n을 한 번/n/n _________/n"); }}}2. 구성 파일에서 서비스 스캔 패키지를 설정합니다 (ApplicationContext-Servlet.xml).
<!-등록 @controller, @service-> <context : component-scan base-package = "com.test.controller"use-default-filters = "false"> <context : 포함 필터 유형 = "주석"expression = "org.springframwork.stereotyp.controller" /> <context : include filter = "Annotation" expression = "org.springframework.stereotyp.service" /> < /context : component-scan>
3. 시작 프로젝트를 배치하고 스프링이로드 된 후 "로드"를 인쇄하십시오.
ApplicationOnText 및 WebApplicationOntext MVC를 사용한 후 위의 메소드를 두 번 호출합니다. 이 두 용기를 구별하는 방법은 무엇입니까?
그러나 현재로서는 문제가있을 것입니다. 웹 프로젝트 (SpringMVC)에는 시스템에 두 개의 컨테이너가 있으며, 하나는 rootApplication 컨텍스트이고, 다른 하나는 우리 자신의 프로젝트name-servletContext (루트 application 컨텍스트의 하위 함유 자)입니다.
이 경우 onapplicationEvent 메소드는 두 번 실행됩니다. 위에서 언급 한 문제를 피하기 위해 RootApplication 컨텍스트가 초기화 된 후에 만 논리 코드 만 호출 할 수 있습니다. 다른 컨테이너의 초기화가 완료되면 처리가 수행되지 않습니다. 수정 된 코드가 완료되면 코드가 수정됩니다.
다음과 같이 :
@override public void onapplicationEvent (contextrefreshedevent event) {if (event.getApplicationContext (). getParent () == null) {// 루트 응용 프로그램 컨텍스트 부모가없고 보스입니다. // 실행 해야하는 논리 코드는 스프링 컨테이너가 초기화되면 실행됩니다. }}초기화 순서는 다음과 같습니다.
생성자> @PostConstruct> 초기화 비안> 초기 방법
요약
위의 내용은이 기사에서 Spring 프레임 워크의 초기 분석에 관한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 언제든지 메시지를 남길 수 있으며 편집자는 제 시간에 모든 사람에게 답장을합니다. 이 사이트를 지원해 주신 친구들에게 감사드립니다!