Spring ioc 용기 요약 분석

2621 단어 spring ioc
스프링 용 기 를 사용 해 왔 고 책 을 읽 을 때 도 실현 원 리 를 대충 봤 지만 모호 하 다.설날 을 틈 타 debug 한 시간 을 들 여 간단 한 ioc 프로 세 스 와 tips 를 보 세 요.

public class ApplicationContextTest {
    public static void main(String[] args){
    	ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:org/springframework/context/innertest/spring-context.xml");
    	CodeGeFactory factory=(CodeGeFactory) ctx.getBean("generatorFactory");
    	System.out.println(factory.getCodeGenerator().generate());
    }
}


<bean id="generatorFactory"     class="org.springframework.context.innertest.pojo.CodeGeFactory">
     <property name="codeGenerator" ref="codeGenerator"/>
</bean>

<bean id="codeGenerator" class="org.springframework.context.innertest.pojo.JavaCodeGenerator"/>


예제 코드 는 매우 간단 하 다. 자세히 말 하지 않 으 면 하나의 주입 이 고 그 다음 에 순 서 를 뒤 바 꾸 는 것 이다.여기 서 먼저 ApplicationContext 와 BeanFactory 를 구분 합 니 다. 전 자 는 BeanFactory 에 포장 되 어 있 고 주로 bean 정의 에 대한 분석 과 각종 processer 와 특수 bean (xxxAware 실현 류) 의 초기 화 와 호출 을 합 니 다. 그리고 진정한 bean 실례 화 와 ioc 작업 은 모두 BeanFactory 에서 합 니 다.
초기 화 작업 은 주로 ClassPathXmlApplication Context 를 실례 화 할 때 입 니 다.우선 경로 자체 에 place Holder 의 자리 표시 자 (${xxx}) 를 바 꾸 고 이 프로필 경 로 를 저장 합 니 다.다음 에 주체 초기 화 방법 refresh () 방법 에 들 어 갑 니 다.refresh () 주요 한 일 은 다음 과 같 습 니 다.
1. placeholder 를 초기 화하 고 properties 를 검사 합 니 다. 파일 (또는 문자열) 을 BeanDefinition 으로 바 꾸 는 데 사용 합 니 다.
2. beanFactory 를 만 들 고 설정 파일 분석 xml 의 정 보 를 읽 습 니 다. 주로 bean 의 id, 대응 하 는 class 전체 이름, 의존 하 는 bean 의 이름 등 정 보 를 포함 합 니 다. 이 때 는 모두 텍스트 정보 로 초기 화 및 주입 등 작업 을 하지 않 습 니 다.특히, spring 은 location 문자열 의 접두사 에 따라 전체 자원 을 서로 다른 유형의 Resource 로 봉 하고 해당 하 는 Resource Loader 를 사용 하여 불 러 옵 니 다. 그러나 마지막 으로 구체 적 인 classloder (통속 적 으로 는 서로 다른 파일 위치) 와 상대 적 인 파일 경 로 를 통 해 파일 자원 을 찾 을 수 있 을 뿐 입 니 다.Spring 은 지나치게 풍부 해 보 이 는 자원 유형 을 지원 하기 위해 부득이 한 것 으로 보인다.
3. 중간 에 외부 processer 의 정례 화 와 invoke 를 많이 만 들 었 습 니 다. 예제 가 정의 되 지 않 아 모두 건 너 뛰 었 습 니 다.
4. bean 을 반사 적 으로 예화 한 다음 에 의존 하 는 bean 을 찾 습 니 다. 초기 화 되 지 않 고 직접 초기 화 되 었 습 니 다. 이것 은 bean 의 정의 에서 선후 관 계 는 중요 하지 않 습 니 다. 정 의 된 xml (또는 기타) 가 load 에 들 어 와 Bean Definition 으로 봉 인 된 경우 용기 에서 찾 아 예화 할 수 있 기 때 문 입 니 다.주입 에 대해 중간 코드 는 많은 (속성 편집기) 가 있 고 자세히 따 지지 않 았 으 며 마지막 으로 관련 속성 을 반사 적 으로 얻 은 write method invoke 를 통 해 주입 을 완성 했다 (구조 기 주입 과 주해 주입 절차 도 많 지 않다).결국 용기 에 넣는다.
5. 사용 할 때 (ctx. getBean ("generator Factory") 는 용기 에 캐 시 된 인 스 턴 스 를 가 져 오 는 것 입 니 다.여기 서 주의해 야 할 것 은 기본 적 인 spring bean 은 모두 하나의 예 이다.

좋은 웹페이지 즐겨찾기