(1) 컨테이너와 스프링 애플리케이션 컨텍스트에 대한 철저한 이해 검토 학습을 --Spring

저자 : 첸 Buyi의
www.cnblogs.com/chenbenbuyi

기사의 봄 시리즈
(1) 학습 리뷰 --Spring Spring 컨테이너 및 응용 프로그램 컨텍스트에 대한 철저한 이해
학습 리뷰 --Spring (2) DI / IOC와 AOP 원칙 지인
(3) 자동 조립 콩 - 봄 향적 연구
자바를 통해 (4) 주석과 XML 구성 조립 콩 - 봄 향적 연구
(5) AOP 프로그래밍 리뷰 섹션을 --Spring는 --Spring 리뷰 학습을 배울 수

당신이 봄, 그런데 의존성 주입이되면, 우리의 사업 코드가 연관된 객체의 수명주기를 관리 할 필요가 없습니다. 그래서 봄이 객체에 세 심하게 배려입니다 - 비즈니스 코드는 비즈니스 프로세스 자체가 걸어 어디서나, 추가 지원의 필요성에 따라 봄 내가 반대하려는 말했다주고, 걸어 따라야합니다.

사용하기 어려운 일이 아니다, 간단한 소리 만이 유일한주의 경우, 어떤 뇌 수수료없이 꽤 무료 쉽습니다. . . 개체가 당신에 어디 그러나, 당신이 정말로 상관 없어, 봄은?

당신이 깊은 봄을 배우고 싶은 경우에, 단지와의 사용을, 당신은 그렇지 않으면,이 블로그는 당신이 삽 아를 참조 상소에 관한 문제에 대해 신중하게 생각해야한다. . .

당신은 이것에 대해 생각 할 수 있습니다 애플이 이렇게 많은 전화 (객체)를 생산하기 위해 같은 객체를 참여하는 특별한 장소가되어야하므로, 애플리케이션 관리, 많은 객체를 생성하는 것이 책임 싶어 봄합니다. 애플의 휴대 전화 생산 등의 폭스콘과 같은라는 곳에서 공장,하지만 우리가 물체에 관여하지 않을 로컬 봄을위한 소프트웨어 개발은 ​​공장을 불러 컨테이너를 불렀다.

예, 자바 컨테이너의 개념은 당신은 톰캣보다 가장 잘 알고있는, 그리고 웹 컨테이너를 실행하는 서블릿이지만, 봄 의존성 주입 기능을 달성하기 위해, 당신은 컨테이너 개체의 생산없이 할 수 없어 - 어떤 컨테이너가없는 경우 관리 객체를 만들기위한 책임이 코드는 개체를 호출해야합니다, 봄은 아무데도 아 당신에게 없습니다. 파괴 제작, 조립, - 사실, 컨테이너 기능을 달성하기 위해 핵심 스프링 프레임 워크, 컨테이너가 단지 우리가 그렇게 단순 객체를 생성 도움이되지 않습니다, 그것은 전체 수명주기에있는 개체를 관리 할 책임이있다.

이 컨테이너의 봄에 대해 가장 자주 듣는 용어는 IOC 컨테이너입니다. 소위 IOC는, 제어 프로그래밍 아이디어의 반전이라고, 인터넷은 이해하기 쉽게 요약했다, 나는 부담없이 설명하지 않습니다. 한마디로, 내 응용 프로그램이 IOC에게 작업을 오른쪽으로 할 수있는 컨테이너를 만들고 개체를 관리하고, 수 있도록 더 이상 객체 간의 종속성을 귀찮게했다, 그게 내가 창조 객체 봄의 관리를 통해 제어 할 말을하지 않습니다 제어 권한의 반대입니다 용기, 그래서 용기는 봄 IOC 컨테이너 호출 할 수 있습니다. 비록, 내가 한 가지를 명확히하고자 : 봄 별, 봄 IOC 컨테이너라는 전용 용기, 컨테이너 기반 프레임 워크 IOC 많은 있다는 것을하지 말하는 것이 아니다.

그럼, 마지막으로 봄 컨테이너의 개념은 그것에 대해 규정,하지만 사용은 계란입니까? 당신이 실제로 아무것도 할 수 없어 빛 용기! 당신은 공상 과학 컨테이너, 딸랑 딸랑 고양이 앞에 보물 가방처럼, 당신이 무엇을 원하는 당신을 줄 것이라고 생각하십니까? 사실, 컨테이너 내부에 아무것도, 용기는 우리에게 단지 관리 오브젝트 공간을 제공 할 수있는 용기를주고, 또한 우리 자신의 개체가 개체 사이의 우리 자신의 결정 종속성입니다 내부 듯했으나할지 결정합니다. 그럼, 어떻게 우리가 대신 컨테이너 개체 관리에 우리의 용기를 넣어해야합니까? 이것은 Spring 컨텍스트의 응용 프로그램을 포함한다.

그것의 응용 프로그램의 컨텍스트 무엇, 당신은 단순히 이해할 수있는 성과는 당신이 봄 당신이 용기 때문에 한 종류의 물체를 관리 할 수 ​​있도록해야합니다. . 한 종류. . 금액. . 컨테이너 개체 - 예, Spring 애플리케이션 컨텍스트 컨테이너 추상적 인 표현이며, 우리의 공동의 ApplicationContext에 말하기는 기본적으로 콩과 객체의 정의 사이의 협력 관계를 유지하기 위해 높은 수준의 인터페이스입니다. 금액은 매우 추상적 입 소리를하지 않는 이유는 무엇입니까? 그럼 당신은 그것을 다시 읽어. . .

여기, 우리가 명확해야, 봄의 핵심은 컨테이너 및 컨테이너가 고유하지 않습니다, 프레임 워크 자체가 용기의 숫자의 구현을 제공, 대략 두 가지 유형으로 나누어 하나는 일반적으로 간단한 컨테이너의 BeanFactory를 사용하지 않는 기본적인 DI 기능을 제공, 또 다른 우리가 위에서 언급 한 추상 인터페이스의 ApplicationContext는 BeanFactory로는,이 같은 구성을 분석하는 등보다 엔터프라이즈 급 서비스를 제공 할 수있는 후 애플리케이션 컨텍스트가 파생 상속하는 것입니다 가장 일반적인 컨텍스트 인스턴스 객체 시나리오 그래서 텍스트 메시지와.

컨텍스트 개체, 우리는 Spring 컨테이너를 관리 할 필요의 목적을 등록 할 수 있습니다. 컨텍스트 추상적 인 인터페이스의 경우, Spring은 우리가 다른 시나리오 사이에서 선택을 위해, 달성하기 위해 용기의 종류의 다양한으로 우리를 제공합니다 :

  • AnnotationConfigApplicationContext: 하나 개 이상의 구성 클래스 자바 기반 컨텍스트 정의에서로드, 방법은 자바 주석에 적용 할 수있다;

  • ClassPathXmlApplicationContext: 클래스 경로에서 하나 이상의 XML 구성 파일로부터로드 콘텍스트 정의 XML 구성의 적절한 방식으로;

  • FileSystemXmlApplicationContext: 파일 시스템에있는 하나 이상의 XML 설정 파일에서로드 컨텍스트 정의는, 그는 XML 설정 파일 시스템 드라이브에로드되어;

  • AnnotationConfigWebApplicationContext: 특별히 주석 모드 준비 웹 응용 프로그램;

  • XmlWebApplicationContext: XML 구성에 대해 하나 이상의 컨텍스트 정의 XML 설정 파일에서 웹 응용 프로그램을로드.

위의 이해를 바탕으로, 문제는 매우 간단합니다. 당신은 그냥 나, 짧은에, 당신은 객체 (봄 우리 모두가 요구 콩 전화) 관리 할 당신이 자바 노트를 언급 할 가치가 당신의 IOC 컨테이너 XML 기반의 관리에 필요한 객체, 빈 사이의 협력 관계는, 구성 당신이 당신의 프로그램에 대해 원하는 객체 관리 서비스를 제공 할 수있는 우리의 Spring 컨테이너에로드 된 애플리케이션 컨텍스트 객체를 사용하여. 다음은, 또는 그것을 응용 프로그램 컨텍스트의 간단한 응용 프로그램 예제를 붙여 넣습니다

XML 구성은 구성 콩의 방법으로하자와 콩 사이의 협력 관계를 구축 :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    <bean id="man" class="spring.chapter1.domain.Man">
        <constructor-arg ref="qqCar" />
    </bean>
    <bean  id="qqCar" class="spring.chapter1.domain.QQCar"/>
</beans>

그리고 봄이 우리를 위해 개체를 관리 가능하도록 IOC 컨테이너 응용 프로그램 컨텍스트를 통해 구성을로드, 우리는 확인 때 다음 컨테이너에서 빈을받을 객체를 사용합니다 :

public class Test {
    public static void main(String[] args) {
        //加载项目中的spring配置文件到容器
//        ApplicationContext context = new ClassPathXmlApplicationContext("resouces/applicationContext.xml");
        //加载系统盘中的配置文件到容器
        ApplicationContext context = new FileSystemXmlApplicationContext("E:/Spring/applicationContext.xml");
        //从容器中获取对象实例
        Man man = context.getBean(Man.class);
        man.driveCar();
    }
}

위의 테스트, 나는 단지 구성 파일을로드 적절한 컨텍스트 개체를 사용할 필요가 applicationContext.xml 프로젝트 및 시스템 드라이브 아래에 배치 된 프로파일 것, 최종 결과는 동일하다. 물론, 지금은 더 많은 프로젝트가 자바 어노테이션을 사용하기 때문에 필수적인 방법을 노트 :

//同xml一样描述bean以及bean之间的依赖关系
@Configuration
public class ManConfig {
    @Bean
    public Man man() {
        return new Man(car());
    }
    @Bean
    public Car car() {
        return new QQCar();
    }
}


public class Test {
    public static void main(String[] args) {
        //从java注解的配置中加载配置到容器
        ApplicationContext context = new AnnotationConfigApplicationContext(ManConfig.class);
        //从容器中获取对象实例
        Man man = context.getBean(Man.class);
        man.driveCar();
    }
}

그 이후로, 봄 컨테이너 및 애플리케이션 컨텍스트도 거의 다음 블로그 게시물의 특정 스킬 포인트 천천히 모두가 제공하는 것이기 설명했다.

추천

출처blog.csdn.net/qq_40914991/article/details/91367011