spring 에서 webapplication.getBean 을 가 져 오 는 여러 가지 경로 와 간단 한 설명

6667 단어 봄 공부
설명:
이러한 방식 은 Spring 프레임 워 크 를 사용 하 는 독립 된 응용 프로그램 에 적용 되 며,프로그램 이 프로필 을 통 해 Spring 을 수 동 으로 초기 화 해 야 하 는 경우 입 니 다.
ApplicationContext ac1 = new FileSystemXmlApplicationContext("com/spark/system/applicationContext.xml");//                        
//com/spark/system/applicationContext.xml   "file:com/spark/system/applicationContext.xml"
ac1.getBean("beanId");

//ApplicationContext ac2=new ClassPathXmlApplicationContext("com/spark/system/applicationContext.xml");//                   
//com/spark/system/applicationContext.xml    "classpath:com/spark/system/applicationContext.xml"
 ac2.getBean("beanId"); 


설명:이 방식 은 바로 우리 가 아래 에서 언급 한 WebApplication ContextUtils 도구 류 에서 getWebApplication Context(ServletContext sc)방법의 내부 실현 입 니 다.다음 방식 은 spring 이 제공 하 는 WebApplication ContextUtils 도구 류 를 통 해 WebApplication Context 를 얻 는 것 입 니 다.
방식 1:
설명:
이러한 방식 은 Spring 프레임 워 크 를 사용 하 는 B/S 시스템 에 적합 하 며,ServletContext 대상 을 통 해 applicationContext 대상 을 가 져 온 다음 필요 한 인 스 턴 스 를 가 져 옵 니 다.
위의 두 도구 방식 의 차 이 는 전 자 는 획득 에 실 패 했 을 때 이상 을 던 지고 후 자 는 null 로 돌아 가 는 것 이다.
방식 2:
	public void getBean(HttpServletRequest req,HttpSession se)
	{
//		se.getServletContext()    
		WebApplicationContext wac=(WebApplicationContext)req.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
		wac.getBean("");
	}

추상 클래스 웹 응용 프로그램 Object Support 설명 을 계승 합 니 다.추상 클래스 웹 응용 프로그램 Object Support 는 응용 프로그램 Object Support 에서 get응용 프로그램 Context()방법 을 계승 하여 응용 프로그램 Context 를 편리 하 게 얻 을 수 있 습 니 다.Spring 이 초기 화 될 때 이 ApplicationObject Support 의 setApplicationContext(ApplicationContext context)방법 으로 ApplicationContext 대상 을 주입 합 니 다.물론 애플 리 케 이 션 Object Support 를 직접 계승 하여 스스로 실현 하 셔 도 됩 니 다.spring 이 더 편리 한 추상 적 인 도구 류 인 WebApplication Object Support 를 제공 한 이상 사용 하 는 것 을 권장 합 니 다.문제 가 생기 지 않도록 하 다
다음은 WebApplication Object Support 키 소스(빨간색 부분)를 보 겠 습 니 다.
import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc)
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)
ac1.getBean("beanId");
ac2.getBean("beanId"); 

다음은 애플 리 케 이 션 Object Support 소스 입 니 다.
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationObjectSupport;

public class ApplicationContextUtils extends WebApplicationObjectSupport{

	public  WebApplicationContext isgetWebApplicationContext(){
		return super.getWebApplicationContext();
	}
	
}

원본 코드 를 통 해 spring 이 만 든 두 번 의 패 키 징 이 어떻게 WebapplicationContext 를 얻 었 는 지 쉽게 알 수 있 습 니 다.  물론 자신 도 바 텀 인터페이스 자체 포장 을 실현 할 수 있다.
예 를 들 어 추상 적 인 응용 프로그램 Object Support 를 계승 하고 추상 적 인 응용 프로그램 Object Support 는 get응용 프로그램 Context()방법 을 제공 하여 응용 프로그램 Context 를 편리 하 게 얻 을 수 있 습 니 다.Spring 초기 화 시 이 추상 적 인 종류의 setApplicationContext(ApplicationContext context)방법 으로 ApplicationContext 대상 을 주입 합 니 다.
예 를 들 어 인터페이스 ApplicationContextAware 를 실현 하고 이 인터페이스의 setApplicationContext(ApplicationContext context)방법 을 실현 하 며 ApplicationContext 대상 을 저장 합 니 다.Spring 초기 화 시 이 방법 을 통 해 applicationContext 대상 을 주입 합 니 다.
이상 의 방법 은 서로 다른 상황 에 적합 하 므 로 구체 적 인 상황 에 따라 상응하는 방법 을 선택 하 십시오.여기 서 주의해 야 할 것 은 시스템 에서 상기 방법 을 사용 하 는 유형 은 실제 적 으로 Spring 프레임 워 크 와 밀접 하 게 결합 되 었 다 는 것 이다.이런 유형 들 은 Spring 프레임 워 크 에서 실행 되 는 것 을 알 기 때문에 시스템 에서 이러한 응용 을 최대한 줄 이 고 시스템 이 현재 운영 환경 에서 독립 되도록 DI 방식 으로 필요 한 서비스 제공 자 를 얻 도록 해 야 한다.
PS:applicationContext 를 통 해 getBean("beanId")을 수 동 으로 가 져 오 는 것 외 에 도 beanfactory 공장 의.getBean("beanId")을 통 해 Bean 인 스 턴 스 를 가 져 올 수 있 습 니 다.
예 를 들 면:
/*** Eclipse Class Decompiler, copyright (c) 2012 cnfree ([email protected]) ***/
package org.springframework.web.context.support;

import java.io.File;
import javax.servlet.ServletContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ApplicationObjectSupport;
import org.springframework.web.context.ServletContextAware;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.util.WebUtils;

public abstract class WebApplicationObjectSupport extends ApplicationObjectSupport implements ServletContextAware{

	private ServletContext servletContext;

	public final void setServletContext(ServletContext servletContext){
		if (servletContext != this.servletContext){
			this.servletContext = servletContext;
			if (servletContext != null) initServletContext(servletContext);
		}
	}

	protected boolean isContextRequired(){
		return true;
	}

	protected void initApplicationContext(ApplicationContext context){
		super.initApplicationContext(context);
		if ((this.servletContext == null)
				&& (context instanceof WebApplicationContext)){
			this.servletContext = ((WebApplicationContext)context)
					.getServletContext();
			if (this.servletContext != null)
				initServletContext(this.servletContext);
		}
	}

	protected void initServletContext(ServletContext servletContext){}

	protected final WebApplicationContext getWebApplicationContext()
			throws IllegalStateException{
		ApplicationContext ctx = getApplicationContext();
		if (ctx instanceof WebApplicationContext){ return ((WebApplicationContext)getApplicationContext()); }
		if (isContextRequired()){ throw new IllegalStateException(
				"WebApplicationObjectSupport instance [" + this
						+ "] does not run in a WebApplicationContext but in: "
						+ ctx); }
		return null;
	}

	protected final ServletContext getServletContext()
			throws IllegalStateException{
		if (this.servletContext != null){ return this.servletContext; }
		ServletContext servletContext = getWebApplicationContext()
				.getServletContext();
		if ((servletContext == null) && (isContextRequired())){ throw new IllegalStateException(
				"WebApplicationObjectSupport instance ["
						+ this
						+ "] does not run within a ServletContext. Make sure the object is fully configured!"); }
		return servletContext;
	}

	protected final File getTempDir() throws IllegalStateException{
		return WebUtils.getTempDir(getServletContext());
	}
}

BeanFactory.getBean 과 Application Context.getBean 의 공통점 과 단점,사용 상황 을 연구 해 야 한다.뜻 이 맞 는 동 지 는 언제든지 댓 글 을 달 아 토론 할 수 있 습 니 다.동생 은 모두 가 함께 공부 하 는 것 을 환영 합 니 다.
본문 은 오리지널 에 속 하 니 표절 하지 마 세 요.감사합니다!

좋은 웹페이지 즐겨찾기