BeanFactory와 어플리케이션 컨텍스트
저는 Spring Framework에 대해 잘 알지 못하기 때문에 Spring MVC를 평가할 목적으로 Spring Framework를 가지고 놀면서 샘플 앱을 몇 개 조립하고 있습니다.지금까지 봄 MVC에서 볼 수 있는 것이 매우 마음에 들고, 매우 사용하기 쉬운 것 같고, 매우 유닛 테스트 친화적인 수업을 쓰도록 권장합니다.
연습 삼아 샘플/테스트 프로젝트 중 하나의 주요 방법을 쓰고 있습니다. 가지 이 두 가지 .BeanFactory
★★★★★★★★★★★★★★★★★」ApplicationContext
- 어떤 경우에 사용하는 것이 적절한가요?
는 그것을 한다.ApplicationContext
를 확장하다BeanFactory
,, 순, 순, 단, 단, 음, 음, 음, 음, 음, 음, 음 등의 추가 기능이 요?ApplicationContext
제공합니까?그리고 정확히 어떤 종류의 추가 기능이ApplicationContext
★★★★★★★★★★★★★★★★★★?
main() 메서드에서 어느 것을 사용해야 하는가라고 대답하는 것 외에, 그러한 시나리오에서 어느 실장을 사용해야 하는가 하는 기준이나 가이드라인이 있는가?main() 메서드는 XML 형식의 bean/application 설정에 따라 작성해야 합니까?안전한 가정입니까, 아니면 사용자를 특정 형식으로 잠그고 있습니까?
이 은 웹 내 중 봄을 가 있는 사람이 , 은 봄을 더 로 하는 요?- 봄을 알아야 한다.ApplicationContext
도와주셔서 감사합니다.이러한 질문의 대부분은 레퍼런스 매뉴얼에 기재되어 있을 것입니다만, 이 2개의 인터페이스와 각각의 장점에 대해 알기 쉽게 설명하지 않고서는 이해하기 어렵습니다.
봄철 문서는 이 점에 대해 훌륭합니다: 3.8.1. Bean Factory 또는 Application Context?비교표가 있습니다.조각을 투고하겠습니다.
콩 공장
- 콩 인스턴스화/배선
응용 프로그램콘텍스트
- 콩 인스턴스화/배선
- Bean Post Processor 자동 등록
- Bean Factory Post Processor 자동 등록
- 편리한 메시지 소스 액세스(i18n용)
- ApplicationEvent 퍼블리케이션
따라서 Application Context 측에 표시되는 포인트가 필요한 경우 Application Context를 사용해야 합니다.
은 두 컨테이너를 합니다. 는 IOC 컨테이너입니다. 하나는
XMLBeanFactory
또 는 또또 and and and and 。ApplicationContext
.
빈팩토리 | 응용 프로그램 컨텍스트 | |
---|---|---|
주석 지원 | 아니요. | 네. |
Bean Post Processor 등록 | 설명서 | 자동의 |
실행 | XMLBean Factory | ClassPath/FileSystem/WebXml Application Context |
국제화 | 아니요. | 네. |
엔터프라이즈 서비스 | 아니요. | 네. |
ApplicationEvent 퍼블리케이션 | 아니요. | 네. |
FileSystemXmlApplicationContext
전체 경로를 통해 로드된 콩입니다.ClassPathXmlApplicationContext
CLASSPATH CLASSPATH PATH를 된 콩XMLWebApplicationContext
★★★★★★★★★★★★★★★★★」AnnotationConfigWebApplicationContext
웹 응용 프로그램 컨텍스트를 통해 로드된 콩입니다.AnnotationConfigApplicationContext
주석 기반 구성에서 스프링 콩을 로드하는 중입니다.
예:
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeansConfiguration.class);
ApplicationContext
에 의해 초기화되는 입니다.ContextLoaderListener
★★★★★★★★★★★★★★★★★」ContextLoaderServlet
되어 있다web.xml
★★★★★★★★★★★★★★★★★」ContextLoaderPlugin
되어 있습니다.struts-config.xml
.
주의:XmlBeanFactory
Spring 3.1에서 권장되지 않습니다.DefaultListableBeanFactory
★★★★★★★★★★★★★★★★★」XmlBeanDefinitionReader
.
있어서, 「」, 「」를 선택하는 는, 「」입니다.BeanFactory
에 걸쳐서ApplicationContext
것 ApplicationContext
모든 콩을 미리 숙성시킵니다.Spring 문서의 내용:
스프링은 속성을 설정하고 빈이 실제로 생성될 때 가능한 한 늦게 종속성을 해결합니다.즉, 올바르게 로드된 스프링 컨테이너는 나중에 개체 또는 개체 종속성 중 하나를 만드는 데 문제가 있을 경우 해당 개체를 요청할 때 예외를 생성할 수 있습니다.예를 들어 bean은 속성이 누락되었거나 유효하지 않은 결과로 예외를 발생시킵니다.일부 설정 문제에 대한 가시성이 지연될 가능성이 있기 때문에 Application Context 구현은 기본적으로 싱글톤빈 프리인스턴스화 됩니다.실제로 필요하기 전에 이러한 콩을 작성하기 위해 초기 시간과 메모리를 소비하는 대신 Application Context를 작성할 때 구성 문제를 발견할 수 있습니다.이 디폴트 동작을 덮어쓰고 싱글톤빈을 사전 인스턴스화하지 않고 슬로지 초기화 할 수 있습니다.
에는 '아까부터'를 선택했습니다.BeanFactory
격리된 콩을 테스트하기 위해 전체 애플리케이션을 로드하고 싶지 않았기 때문에 통합/퍼포먼스 테스트에 사용할 수 있습니다. 만약 , .BeanFactory
「」을 서포트하고 않습니다.classpath
"So "BeanFactory
★★★★★★★★★★★★★★★★★」ApplicationContext
각각은 제가 원하던 중요한 기능을 제공하지만 둘 다 그렇지 않습니다.
디폴트 인스턴스화 동작을 덮어쓰는 것에 관한 문서의 메모는 Configuration에서 이루어지며, 이는 bean 단위이기 때문에 XML 파일에 "lazy-init" 속성을 설정할 수 없습니다.또한 테스트용과 전개용 버전을 유지할 수 없습니다.
결국 제가 한 일은ClassPathXmlApplicationContext
다음과 같은 테스트에 사용하기 위해 콩을 천천히 로드합니다.
public class LazyLoadingXmlApplicationContext extends ClassPathXmlApplicationContext {
public LazyLoadingXmlApplicationContext(String[] configLocations) {
super(configLocations);
}
/**
* Upon loading bean definitions, force beans to be lazy-initialized.
* @see org.springframework.context.support.AbstractXmlApplicationContext#loadBeanDefinitions(org.springframework.beans.factory.xml.XmlBeanDefinitionReader)
*/
@Override
protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws IOException {
super.loadBeanDefinitions(reader);
for (String name: reader.getBeanFactory().getBeanDefinitionNames()) {
AbstractBeanDefinition beanDefinition = (AbstractBeanDefinition) reader.getBeanFactory().getBeanDefinition(name);
beanDefinition.setLazyInit(true);
}
}
}
Miguel Ping의 답변에 덧붙여, 여기에 대응하는 문서의 다른 섹션을 다음에 나타냅니다.
쇼트 버전: Application Context를 사용하지 않는 특별한 이유가 없는 한 사용합니다.위의 권장 사항의 '하지만 왜'에 대해 조금 더 자세히 알고 싶은 분들은 계속 읽어보시기 바랍니다.
(이 질문을 읽을 수 있는 미래의 봄 초보자용 게시물)
ApplicationContext
방법BeanFactory
버전 의의 in in 。
BeanFactory
, 로로었 is is is is로 바뀝니다.ApplicationContext
★★★★★★★★★★★★★★★★★★★★★★.BeanFactory
을 위해 합니다.ApplicationContext extends BeanFactory
하다- 텍스트 메시지의 국제화를 지원합니다.
- 등록된 청취자에 대한 이벤트 게시를 지원합니다.
- URL 및 파일 등의 리소스에 대한 액세스
응용 프로그램 컨텍스트:스프링 구성 파일에 구성된 스프링 콩을 로드하고 스프링 콩의 라이프 사이클을 As 및 WHEN CONTER STARTED를 관리합니다.getBean("springbeanref")이 호출될 때까지 기다리지 않습니다.
BeanFactory 스프링 구성 파일에 구성된 스프링 콩을 로드하고 getBean("spring beanref")을 호출할 때 스프링 콩의 라이프 사이클을 관리합니다.그래서 우리가 봄철에 getBean("springbeanref")을 부르면 콩의 라이프 사이클이 시작됩니다.
다른 사람이 이미 말한 것처럼 모바일 환경에 있는 경우를 제외하고는 Application Context를 항상 사용하는 것이 좋다고 생각합니다.Application Context에는 더 많은 기능이 있으며 RequiredAnnotationBeanPostProcessor, AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor 등의 포스트 프로세서를 사용해야 합니다.이 포스트 프로세서는 스프링 구성 파일을 단순화하는 데 도움이 됩니다.@ Constructure 등의 주석을 사용할 수 있습니다.등등의 정보를 얻을 수 있습니다.
Application Context가 제공하는 모든 것을 사용하지 않더라도 이를 사용하는 것이 좋습니다.그리고 나중에 메시지나 포스트 프로세서 등의 리소스나 기타 스키마를 사용하여 트랜잭션 어드바이스를 추가하는 경우 Application Context는 이미 존재하므로 코드를 변경할 필요가 없습니다.
스탠드아론 앱을 작성하는 경우 ClassPathXml ApplicationContext를 사용하여 ApplicationContext를 메인 메서드로 로드하고 메인 빈을 가져와 run()(또는 어떤 메서드라도)을 호출하여 앱을 시작합니다.웹 앱을 작성할 경우 web.xml의 ContextLoaderListener를 사용하여 ApplicationContext를 만듭니다.JSP, JSF, JSTL, struts, Tapestry 등에 관계없이 나중에 ServletContext에서 가져올 수 있습니다.
또한 여러 Spring 컨피규레이션파일을 사용할 수 있으며 컨스트럭터 내의 모든 파일을 나열하여 ApplicationContext를 작성하거나(또는 ContextLoaderListener의 context-param에 나열하여), Import 스테이트먼트가 있는 메인컨피규레이션파일을 로드할 수도 있습니다.<import resource="otherfile.xml" />을 사용하여 스프링 구성 파일을 다른 스프링 구성 파일로 Import할 수 있습니다.이 파일은 메인 메서드에서 ApplicationContext를 프로그래밍 방식으로 생성하여 하나의 스프링 구성 파일만 로드할 때 매우 유용합니다.
Bean Factory 와 Application Context 의 차이는 다음과 같습니다.
- BeanFactory는 느린 초기화를 사용하지만 ApplicationContext는 빠른 초기화를 사용합니다.BeanFactory의 경우 getBeans() 메서드를 호출할 때 bean이 작성되지만 ApplicationContext 객체가 작성될 때 ApplicationContext의 경우 bean이 먼저 작성됩니다.
- BeanFactory는 구문을 사용하여 리소스 개체를 명시적으로 제공하지만 ApplicationContext는 리소스 개체를 자체적으로 만들고 관리합니다.
- Bean Factory는 국제화를 지원하지 않지만 Application Context는 국제화를 지원합니다.
- BeanFactory 주석 기반 종속성 주입은 지원되지 않지만 ApplicationContext에서는 주석 기반 종속성 주입이 지원됩니다.
Bean Factory 사용:
BeanFactory beanfactory = new XMLBeanFactory(new FileSystemResource("spring.xml"));
Triangle triangle =(Triangle)beanFactory.getBean("triangle");
Application Context 사용:
ApplicationContext context = new ClassPathXMLApplicationContext("spring.xml")
Triangle triangle =(Triangle)context.getBean("triangle");
대부분의 경우 모바일 응용 프로그램과 같이 리소스를 저장할 필요가 없는 경우 ApplicationContext가 선호됩니다.
XML 형식에 의존하는 것은 확실하지 않지만 Application Context의 가장 일반적인 구현은 ClassPathXml Application Context, XmlWeb Application Context 및 FileSystemXml Application Context와 같은 XML 구현입니다.세 개밖에 안 써봤어.
웹 앱을 개발하는 경우 XmlWebApplicationContext를 사용해야 합니다.
Spring을 인식하고 싶다면 Bean Factory Aware 및 Application Context Aware를 구현하도록 콩에 지시할 수 있습니다.그러면 Bean Factory 또는 Application Context 중 하나를 사용하여 구현할 인터페이스를 선택할 수 있습니다.
기본적으로 두 가지 방법으로 스프링 컨테이너 개체를 만들 수 있습니다.
- Bean Factory를 사용합니다.
- Application Context를 사용합니다.
둘 다 인터페이스입니다.
구현 클래스를 사용하여 스프링 컨테이너를 위한 개체를 만들 수 있습니다.
차이점에 도달하다
Bean Factory :
주석 기반 종속성 주입을 지원하지 않습니다.
I18N은 지원하지 않습니다.
기본적으로는 Lazy loading을 지원합니다.
여러 구성 파일을 구성할 수 없습니다.
예: BeanFactory context=new XmlBeanFactory("applicationContext.xml");
응용 프로그램 컨텍스트
주석 기반 종속성 주입을 지원합니다.- @Autowired, @PreDestroy
I18N 지원
기본적으로는 Aggressive 로딩이 지원됩니다.
를 사용하면, 복수의 설정 파일을 설정할 수 있습니다.
삭제:
ApplicationContext context=new ClasspathXml ApplicationContext("applicationContext.xml");
Bean Factory와 Application Context는 모두 봄철 IOC 컨테이너에서 콩을 얻는 방법이지만, 여전히 몇 가지 차이가 있습니다.
Bean Factory는 다수의 콩을 인스턴스화, 구성 및 관리하는 실제 컨테이너입니다.이 콩들은 보통 서로 협력하기 때문에 서로 의존성이 있다.이러한 의존관계는 BeanFactory에서 사용되는 설정 데이터에 반영됩니다.
BeanFactory와 ApplicationContext는 모두 Java 인터페이스이며 ApplicationContext는 BeanFactory를 확장합니다.둘 다 XML 컨피규레이션파일을 사용한 설정입니다.즉, Bean Factory는 기본적인 Inversion of Control(IoC) 및 Dependency Injection(DI) 기능을 제공하며 Application Context는 고급 기능을 제공합니다.
BeanFactory는 "org. springframework" 인터페이스로 나타납니다.beans.factory" 여러 구현이 있는 BeanFactory입니다.
ClassPathResource resource = new ClassPathResource("appConfig.xml");
XmlBeanFactory factory = new XmlBeanFactory(resource);
차이
BeanFactory는 getBean() 메서드를 호출할 때 bean을 인스턴스화하고 ApplicationContext는 컨테이너가 시작될 때 Singleton bean을 인스턴스화합니다.getBean()이 호출될 때까지 기다리지 않습니다.
Bean Factory는 국제화를 지원하지 않지만 Application Context는 이를 지원합니다.
BeanFactory와 ApplicationContext의 또 다른 차이점은 리스너로 등록된 콩에 이벤트를 퍼블리시할 수 있다는 것입니다.
BeanFactory 인터페이스의 일반적인 구현 중 하나는 XMLBeanFactory이고 ApplicationContext 인터페이스의 일반적인 구현 중 하나는 ClassPathXml ApplicationContext입니다.
자동 배선을 사용하여 BeanFactory를 사용하는 경우 ApplicationContext를 사용하는 경우 XML로 설정할 수 있는API를 사용하여 AutoWiredBeanPostProcessor를 등록해야 합니다.요약하자면, Bean Factory는 테스트 및 비실가동 용도로 사용할 수 있지만 Application Context는 기능이 풍부한 컨테이너 구현이므로 Bean Factory보다 우선해야 합니다.
BeanFactory는 기본적으로 Lazy loading과 Application Context를 지원합니다.
Spring Documents에서 제공되는 Bean Factory와 Application Context의 기능 매트릭스
Bean Facotry 및 Application Context 기능 스크린샷
a. bean factory와 어플리케이션콘텍스트의 한 가지 차이점은 getBean() 메서드를 호출할 때만 bean을 인스턴스화하는 반면 ApplicationContext는 컨테이너가 부팅될 때 Singleton bean을 인스턴스화하는 것입니다.getBean 호출을 기다리지 않습니다.
b.
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
또는
ApplicationContext context = new ClassPathXmlApplicationContext{"spring_dao.xml","spring_service.xml};
프로젝트 요구 사항에 따라 하나 이상의 xml 파일을 사용할 수 있습니다.여기에서는 dao 클래스 이외의 서비스 클래스의 설정 상세에 2개의 xml 파일을 사용하고 있습니다.ClassPathXml ApplicationContext는 ApplicationContext의 자식입니다.
c. BeanFactory Container는 기본 컨테이너입니다.개체 작성과 의존관계 주입만 가능합니다.그러나 ApplicationContext Container를 사용해야 하는 모든 서비스를 제공하기 위해 보안, 트랜잭션, 메시징 등의 다른 서비스를 연결할 수는 없습니다.
d. Bean Factory는 국제화(i18n 등)를 지원하지 않지만 Application Context는 이를 지원합니다.
e. BeanFactory Container는 자동 스캔(주석 기반 종속성 주입 지원) 기능을 지원하지 않지만 ApplicationContext Container는 지원합니다.
f. Beanfactory Container는 요청 시간까지 bean 객체를 생성하지 않습니다.빈팩토리 컨테이너는 콩을 느릿느릿 싣는다는 뜻입니다.ApplicationContext Container는 로드 시에만 Singleton bean 객체를 만듭니다.그것은 조기 로딩이 있다는 것을 의미합니다.
g. Beanfactory Container는 콩의 두 스코프(싱글톤 및 시제품)만 지원합니다.그러나 Application Context Container는 모든 beans 범위를 지원합니다.
Spring Docs에서 다음 문서를 참조하십시오.
http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#context-introduction-ctx-vs-beanfactory
5.15.1 Bean Factory 또는 Application Context?
Application Context를 사용하지 않는 특별한 이유가 없는 한 사용합니다.
Application Context에는 Bean Factory의 모든 기능이 포함되어 있기 때문에 일반적으로 Bean Factory보다 권장됩니다.단, 애플릿 등 메모리 소비량이 중요하거나 몇 킬로바이트를 추가하면 차이가 날 수 있습니다.그러나 대부분의 일반적인 엔터프라이즈 애플리케이션 및 시스템에서는 Application Context를 사용합니다.Spring 2.0 이후에는 BeanPostProcessor 확장 포인트를 많이 사용하고 있습니다(프록시 등을 유효하게 하기 위해서).플레인 Bean Factory만 사용하는 경우 트랜잭션이나 AOP 등의 상당한 지원은 활성화되지 않습니다.적어도 고객 측에서 몇 가지 추가 절차를 밟지 않으면 활성화되지 않습니다.설정에 실제로 문제가 있는 것은 아니기 때문에 이 상황은 혼란스러울 수 있습니다.
Application Context는 Bean Factory의 빅 브라더이며, Bean Factory가 제공하는 모든 것 외에 많은 것이 있습니다.
표준 org.spring framework와 더불어콩류.BeanFactory 라이프 사이클 기능, ApplicationContext 구현은 ApplicationContextAware 빈과 ResourceLoaderAware, ApplicationEventPublisherAware 및 MessageSourceAware 빈을 검출하여 실행합니다.
실시간 시나리오에서 Spring IOC 코어 컨테이너(BeanFactory)와 Advanced J2EE 컨테이너(ApplicationContext)의 차이는 다음과 같습니다.
파일Bean Factory)에되어 있는 합니다.
<bean></bean>
(.getBean()의단, ApplicationContext는 모든 콩(.getBean()의 오브젝트를 만듭니다.<bean></bean>
스코프가 하는 동안 된 "Protype되지 않은 spring.xml은 spring.xml을 로드하는 동안 spring.xml로 됩니다.Bean Factory : (사용자/메인 클래스에서 명시적으로 호출한 경우에만 콩 오브젝트를 생성하기 때문에 빈 컨테이너)
/* * Using core Container - Lazy container - Because it creates the bean objects On-Demand */ //creating a resource Resource r = (Resource) new ClassPathResource("com.spring.resources/spring.xml"); //creating BeanFactory BeanFactory factory=new XmlBeanFactory(r); //Getting the bean for the POJO class "HelloWorld.java" HelloWorld worldObj1 = (HelloWorld) factory.getBean("test");
Application Context: (spring.xml 파일 자체를 로드하는 동안 모든 singleton bean 개체를 생성하기 때문에 Eager 컨테이너)
ApplicationContext context = new ClassPathXmlApplicationContext("com/ioc/constructorDI/resources/spring.xml");
기술적으로는 Application Context를 사용하는 것이 좋습니다.실시간 어플리케이션에서는 어플리케이션이 서버 내에서 기동할 때 bean 객체가 작성되기 때문입니다.그러면 개체가 이미 응답할 수 있으므로 사용자 요청에 대한 응답 시간이 줄어듭니다.
Bean Factory & Application Context에 대해 설명할 필요가 있습니다.
BeanFactory: BeanFactory는 SpringBean 컨테이너에 액세스하기 위한 루트 인터페이스입니다.콩 컨테이너의 기본적인 클라이언트 뷰가 있습니다.이 인터페이스는 빈의 수를 유지하는 오브젝트클래스에 의해 실장되며 각각은 문자열 이름으로 일의로 식별됩니다.
Bean 정의에 따라 공장에서는 해당 인스턴스가 포함된 객체의 인스턴스 또는 단일 공유 인스턴스가 될 수 있는 인스턴스를 반환합니다.반환되는 인스턴스의 유형은 콩 팩토리 구성에 따라 달라집니다.
보통 Bean 팩토리에서는 XML 등의 설정 소스에 저장되어 있는 모든 bean 정의를 로드합니다.
Bean Factory는 의존성 주입을 기본적으로 지원하는 가장 단순한 컨테이너입니다.
Application Context Application 컨텍스트는 스프링응용 프로그램에서 설정 정보를 제공하는 중앙 인터페이스입니다.Bean Factory Interface를 구현합니다.
응용 프로그램 컨텍스트는 고급 컨테이너로 속성 파일에서 텍스트 메시지를 해결하는 기능 등 엔터프라이즈 고유 기능의 고급 수준을 추가합니다.
Application Context는 다음을 제공합니다.
응용 프로그램 구성 요소에 액세스하는 콩 팩토리 방식입니다.ListableBeanFactory에서 상속되었습니다.일반적인 방법으로 파일 리소스를 로드하는 기능.ResourceLoader 인터페이스에서 상속됩니다.등록된 청취자에게 이벤트를 게시하는 기능.ApplicationEventPublisher 인터페이스에서 상속됩니다.국제화를 지원하는 메시지 해결 능력.MessageSource 인터페이스에서 상속됩니다.부모 컨텍스트로부터의 상속.하위 컨텍스트의 정의는 항상 우선됩니다.이는 예를 들어 하나의 부모 콘텍스트를 전체 웹 응용 프로그램에서 사용할 수 있는 반면 각 서블릿은 다른 서블릿과 독립적인 자체 자식 콘텍스트를 가지고 있음을 의미합니다.표준 BeanFactory 라이프 사이클 기능과 더불어 ApplicationContext 구현에서는 ApplicationContextAware 빈과 ResourceLoaderAware, ApplicationEventPublisherAware 및 MessageSourceAware 빈이 검출 및 호출됩니다.
BeanFactory는 실행 시 getBean() 메서드가 호출된 후 빈 오브젝트를 느릿느릿 인스턴스화하는 스프링 컨테이너를 의미합니다.
Application Context는 실행 시 getBean() 메서드를 호출하지 않고 전개 중에 빈 오브젝트를 인스턴스화하는 스프링 프레임워크를 의미합니다.
내 6센트:
BeanFactory
★★★★★★★★★★★★★★★★★」ApplicationContext
둘 다 인터페이스입니다.ApplicationContext
를 확장하다BeanFactory
ApplicationContext
자인터페이스입니다.BeanFactory
는 부모 인터페이스입니다.바꿔 말하면ApplicationContext
의 모든 을 갖추고 있습니다.BeanFactory
또한 에는 없는 추가 기능도 있습니다.BeanFactory
.BeanFactory
온 디맨드로 Laty Loading인 콩을 로드합니다.ApplicationContext
기동시에, 「급속 로드」라고 하는 모든 콩을 로드합니다.BeanFactory
는 주석을 지원하지 않지만,ApplicationContext
을 사용하다ApplicationContext
에는 없는 추가 기능이 있습니다.BeanFactory
: 국제화, 이벤트 퍼블리싱, AOP 기능.BeanFactory
는 싱글톤과 프로토타입의 2가지 범위만 지원합니다.ApplicationContext
는 모든 빈 스코프를 지원합니다.BeanFactory
하지 않습니다.BeanFactoryPostProcessor
★★★★★★★★★★★★★★★★★」BeanPostProcessor
자동적으로ApplicationContext
자동으로 등록됩니다.
봄 3부터 공장을 만들고 싶다면 적절한 주석과 함께 사용할 수 있다는 점을 언급할 가치가 있다고 생각합니다.
@Configuration
public class MyFactory {
@Bean
@Scope("prototype")
public MyClass create() {
return new MyClass();
}
}
공장은 주석 또는 xml 구성을 사용하여 스프링 컨테이너로 표시되어야 합니다.
는 Singleton 및 Prototype bean-scope만을 지원하므로 Web 이외의 어플리케이션에는 BeanFactory를 사용합니다.
Application Context 컨테이너는 모든 bean-scope를 지원하므로 웹 응용 프로그램에 사용해야 합니다.
요약:
Application Context에는 Bean Factory의 모든 기능이 포함됩니다.일반적으로 전자를 사용하는 것이 좋습니다.
메모리 소비량이 중요한 모바일 애플리케이션 등, 몇개의 제한적인 상황이 있습니다.
이 시나리오에서는 보다 경량인 Bean Factory를 사용하는 것이 정당화될 수 있습니다.그러나 대부분의 엔터프라이즈응용 프로그램에서는 Application Context를 사용합니다.
자세한 내용은 다음 블로그 투고를 참조하십시오.
봄철 Bean Factory와 Application Context의 차이– 기본부터 Java Spring 블로그
언급URL : https://stackoverflow.com/questions/243385/beanfactory-vs-applicationcontext
'programing' 카테고리의 다른 글
ORA-00904: 잘못된 식별자 (0) | 2023.03.22 |
---|---|
실행 시 SPRING Boot HOST 및 PORT 주소를 취득하려면 어떻게 해야 합니까? (0) | 2023.03.22 |
MySQL에서 JSON 필드 속성의 값을 선택합니다. (0) | 2023.03.22 |
Spring과 통합된 임베디드 Tomcat을 localhost 외에 IP 주소에 대한 요청을 수신하도록 설정하려면 어떻게 해야 합니까? (0) | 2023.03.22 |
cat_id와 term_id의 차이점은 무엇입니까? (0) | 2023.03.22 |