[제2 장] IoC 의 2.3 IoC 의 설정 사용 - 나 에 게 Spring 3 를 배 워 라.
40487 단어 spring3나 에 게 배우다미문 을 함께 감상 하 다.
2.3.1 XML 구성
일반 프로필 구 조 는 다음 과 같 습 니 다.
- <beans>
- <import resource=”resource1.xml”/>
- <bean id=”bean1”class=””>bean>
- <bean id=”bean2”class=””>bean>
- <bean name=”bean2”class=””>bean>
- <alias alias="bean3" name="bean2"/>
- <import resource=”resource2.xml”/>
- beans>
1. 라벨 은 주로 Bean 정 의 를 하 는 데 사 용 됩 니 다.
2. alias 는 Bean 의 별명 을 정의 하 는 데 사 용 됩 니 다.
3. import 는 다른 프로필 을 가 져 오 는 Bean 정의 에 사 용 됩 니 다. 이것 은 여러 개의 프로필 을 불 러 오기 위 한 것 입 니 다. 물론 이 프로필 들 을 하나의 배열 (new String [] {"config1. xml", config2. xml}) 로 구성 하여 applicationContext 에 여러 개의 프로필 을 불 러 올 수 있 습 니 다. 그것 은 사용자 가 결정 하기에 더욱 적합 합 니 다.이 두 가지 방식 은 모두 Bean Definition Reader 를 호출 하여 Bean 정 의 를 읽 는 것 으로 내부 실현 은 아무런 차이 가 없다.탭 은 아래 의 모든 위치 에 놓 을 수 있 으 며 순서 와 관계 가 없습니다.
2.3.2 Bean 의 설정
Spring IoC 용기 의 목적 은 Bean 을 관리 하 는 것 입 니 다. 이 Bean 들 은 설정 파일 의 Bean 정의 에 따라 만 들 것 입 니 다. Bean 정 의 는 용기 내부 에서 Bean Definition 대상 에 의 해 정의 되 는데 이 정 의 는 주로 다음 과 같은 정 보 를 포함 합 니 다.
● 전체 한정 클래스 (FQN): Bean 의 실현 클래스 를 정의 하 는 데 사용 합 니 다.
● Bean 행동 정의: 용기 에서 Bean 의 행동 을 정의 합 니 다.역할 영역 (단일 예, 원형 생 성), 타성 초기 화 여부 및 수명 주기 등 을 포함 합 니 다.
● 빈 생 성 방식 정의: 구조 기 를 통 해 빈 을 만 드 는 지 공장 방법 을 통 해 빈 을 만 드 는 지 설명 한다.
● 빈 간 관계 정의: 즉, 다른 bean 에 대한 인용, 즉 관계 정의 에 의존 하 는 것 이다. 이러한 인용 bean 은 동료 bean 또는 bean 에 의존 하 는 것, 즉 주입 에 의존 하 는 것 이 라 고 할 수 있다.
Bean 정 의 는 '전 한정 클래스 이름' 만 구조 기 나 정적 공장 방법 으로 bean 을 예화 할 때 필수 적 이 고 다른 것 은 모두 선택 할 수 있 는 정의 입 니 다.Spring 은 설정 방식 으로 만 Bean 을 만 들 수 있 습 니까?물론 아 닙 니 다. 일부 Singleton Bean Registry 인터페이스 구현 클래스 도 비 Bean Factory 가 만 든 기 존 사용자 대상 을 용기 에 등록 할 수 있 습 니 다. 이 대상 들 은 반드시 공유 해 야 합 니 다. 예 를 들 어 Default Listable Bean Factory 의 register Singleton () 방법 을 사용 해 야 합 니 다.그러나 메타 데이터 정 의 를 사용 하 는 것 을 권장 합 니 다.
2.3.3 Bean 의 이름
각 Bean 은 하나 이상 의 id (또는 식별 자 또는 이름) 를 가 질 수 있 습 니 다. 여기 서 우 리 는 첫 번 째 id 를 '식별 자' 라 고 부 르 고 나머지 id 는 '별명' 이 라 고 부 릅 니 다.이 id 들 은 IoC 용기 에서 유일 해 야 합 니 다.어떻게 Bean 에 id 를 지정 합 니까? 다음 과 같은 몇 가지 방법 이 있 습 니 다.
하나 id 를 지정 하지 않 고 필요 한 모든 한정 클래스 만 설정 합 니 다. IoC 용기 에서 표 지 를 만 듭 니 다. 클 라 이언 트 는 인터페이스 'T getBean (Class required Type)' 을 통 해 Bean 을 가 져 와 야 합 니 다.
- <bean class=” cn.javass.spring.chapter2.helloworld.HelloImpl”/> (1)
테스트 코드 세 션 은 다음 과 같 습 니 다:
- @Test
- public void test1() {
- BeanFactory beanFactory =
- new ClassPathXmlApplicationContext("chapter2/namingbean1.xml");
- // bean
- HelloApi helloApi = beanFactory.getBean(HelloApi.class);
- helloApi.sayHello();
- }
2. id 를 지정 하려 면 Ioc 용기 에서 유일 해 야 합 니 다.
- <bean id=” bean” class=” cn.javass.spring.chapter2.helloworld.HelloImpl”/> (2)
테스트 코드 세 션 은 다음 과 같 습 니 다:
- @Test
- public void test2() {
- BeanFactory beanFactory = new ClassPathXmlApplicationContext("chapter2/namingbean2.xml");
- // id bean
- HelloApi bean = beanFactory.getBean("bean", HelloApi.class);
- bean.sayHello();
- }
3. name 을 지정 합 니 다. 그러면 name 은 '식별 자' 입 니 다. Ioc 용기 에서 유일 해 야 합 니 다.
- <bean name=” bean” class=” cn.javass.spring.chapter2.helloworld.HelloImpl”/> (3)
테스트 코드 세 션 은 다음 과 같 습 니 다:
- @Test
- public void test3() {
- BeanFactory beanFactory = new ClassPathXmlApplicationContext("chapter2/namingbean3.xml");
- // name bean
- HelloApi bean = beanFactory.getBean("bean", HelloApi.class);
- bean.sayHello();
- }
4. id 와 name 을 지정 합 니 다. id 는 식별 자 이 고 name 은 별명 입 니 다. 반드시 Ioc 용기 에서 유일 해 야 합 니 다.
- <bean id=”bean1”name=”alias1”
- class=” cn.javass.spring.chapter2.helloworld.HelloImpl”/>
-
- <bean id="bean3" name="bean3" class="cn.javass.spring.chapter2.helloworld.HelloImpl"/> (4)
테스트 코드 세 션 은 다음 과 같 습 니 다:
- public void test4() {
- BeanFactory beanFactory = new ClassPathXmlApplicationContext("chapter2/namingbean4.xml");
- // id bean
- HelloApi bean1 = beanFactory.getBean("bean1", HelloApi.class);
- bean1.sayHello();
- // bean
- HelloApi bean2 = beanFactory.getBean("alias1", HelloApi.class);
- bean2.sayHello();
- // id bean
- HelloApi bean3 = beanFactory.getBean("bean3", HelloApi.class);
- bean3.sayHello();
- String[] bean3Alias = beanFactory.getAliases("bean3");
- // id , IoC
- Assert.assertEquals(0, bean3Alias.length);
- }
5. 여러 개의 name 을 지정 하고 여러 개의 name 은 ',', ',', '분할' 을 사용 합 니 다. 첫 번 째 는 식별 자 로 사용 되 고 다른 (alias 1, alias 2, alias 3) 는 별명 이 며 모든 식별 자 는 Ioc 용기 에서 유일 해 야 합 니 다.
- <bean name=” bean1;alias11,alias12;alias13 alias14”
- class=” cn.javass.spring.chapter2.helloworld.HelloImpl”/>
-
- <bean id="bean2" name="alias21;alias22"
- class="cn.javass.spring.chapter2.helloworld.HelloImpl"/> (5)
테스트 코드 세 션 은 다음 과 같 습 니 다:
- @Test
- public void test5() {
- BeanFactory beanFactory =
- new ClassPathXmlApplicationContext("chapter2/namingbean5.xml");
- //1 id bean
- HelloApi bean1 = beanFactory.getBean("bean1", HelloApi.class);
- bean1.sayHello();
- //2 bean
- HelloApi alias11 = beanFactory.getBean("alias11", HelloApi.class);
- alias11.sayHello();
- //3
- String[] bean1Alias = beanFactory.getAliases("bean1");
- System.out.println("=======namingbean5.xml bean1 ========");
- for(String alias : bean1Alias) {
- System.out.println(alias);
- }
- Assert.assertEquals(4, bean1Alias.length);
- // id bean
- HelloApi bean2 = beanFactory.getBean("bean2", HelloApi.class);
- bean2.sayHello();
- //2 bean
- HelloApi alias21 = beanFactory.getBean("alias21", HelloApi.class);
- alias21.sayHello();
- //
- String[] bean2Alias = beanFactory.getAliases("bean2");
- System.out.println("=======namingbean5.xml bean2 ========");
- for(String alias : bean2Alias) {
- System.out.println(alias);
- }
- Assert.assertEquals(2, bean2Alias.length);
- }
6. 라벨 로 별명 을 지정 하고 별명 도 IoC 용기 에서 유일 해 야 합 니 다.
- <bean name="bean" class="cn.javass.spring.chapter2.helloworld.HelloImpl"/>
- <alias alias="alias1" name="bean"/>
- <alias alias="alias2" name="bean"/> (6)
테스트 코드 세 션 은 다음 과 같 습 니 다:
- @Test
- public void test6() {
- BeanFactory beanFactory =
- new ClassPathXmlApplicationContext("chapter2/namingbean6.xml");
- // id bean
- HelloApi bean = beanFactory.getBean("bean", HelloApi.class);
- bean.sayHello();
- // bean
- HelloApi alias1 = beanFactory.getBean("alias1", HelloApi.class);
- alias1.sayHello();
- HelloApi alias2 = beanFactory.getBean("alias2", HelloApi.class);
- alias2.sayHello();
- String[] beanAlias = beanFactory.getAliases("bean");
- System.out.println("=======namingbean6.xml bean ========");
- for(String alias : beanAlias) {
- System.out.println(alias);
- }
- System.out.println("=======namingbean6.xml bean ========");
- Assert.assertEquals(2, beanAlias.length);
- }
이상 의 테스트 코드 는 cn. 자바 ss. spring. chapter 2. NamingBeanTest. 자바 파일 에 있 습 니 다.
정의 로 볼 때 name 이나 id 가 그들 중 하 나 를 지정 할 때 '식별 자' 로 지정 한다 면 왜 id 와 name 이 동시에 존재 합 니까?이것 은 XML 기반 설정 메타 데 이 터 를 사용 할 때 XML 에서 id 는 진정한 XML id 속성 이기 때문에 다른 정의 로 이 id 를 참조 할 때 id 의 장점 을 나 타 냅 니 다. XML 해상도 기 를 이용 하여 인 용 된 이 id 가 존재 하 는 지 검증 하여 존재 하지 않 는 bean 을 인 용 했 는 지, name 을 사용 할 수 있 습 니 다.bean 을 진정 으로 사용 할 때 만 존재 하지 않 는 bean 을 참조 하 는 것 을 발견 할 수 있 습 니 다.
● Bean 명명 약정: Bean 의 명명 은 XML 명명 규범 에 따 르 지만 자바 의 명명 규범 에 부합 되 는 것 이 좋 습 니 다. '자모, 숫자, 밑줄 로' 구성 되 고 좋 은 명명 습관 을 길러 야 합 니 다. 예 를 들 어 '낙타 봉 식', 즉 첫 번 째 단어 이니셜 부터 두 번 째 단어 부터 이니셜 대문자 로 시작 하면 가 독성 을 높 일 수 있 습 니 다.
2.3.4 실례 화 Bean
Spring IoC 용 기 는 Bean 을 어떻게 예화 합 니까? 전통 적 인 응용 프로그램 은 new 와 반사 방식 으로 Bean 을 예화 할 수 있 습 니 다. Spring IoC 용 기 는 Bean 정의 에 있 는 설정 메타 데이터 에 따라 반사 체 제 를 사용 하여 Bean 을 만들어 야 합 니 다. Spring IoC 용기 에 서 는 Bean 정의 에 따라 Bean 을 만 드 는 데 다음 과 같은 몇 가지 방식 이 있 습 니 다.
1. 구조 기 를 사용 하여 빈 을 예화 합 니 다. 이것 은 가장 간단 한 방식 입 니 다. Spring IoC 용 기 는 기본 빈 구조 기 를 사용 할 수도 있 고 매개 변수 구조 기 두 가지 방식 으로 빈 을 만 들 수도 있 습 니 다. 예 를 들 어 다음 과 같은 방식 으로 만 들 빈 형식 을 지정 합 니 다.
빈 구조 기 를 사용 하여 정 의 를 내 립 니 다. 이 방식 을 사용 하면 class 속성 이 지정 한 클래스 에 빈 구조 기 가 있어 야 합 니 다.
- <bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/>
매개 변수 구조 기 를 사용 하여 정의 할 수 있 습 니 다. 이 방식 을 사용 하면 < constructor - arg > 탭 을 사용 하여 구조 기 매개 변수 값 을 지정 할 수 있 습 니 다. 그 중에서 index 는 위 치 를 표시 하고 value 는 상수 값 을 표시 하 며 인용 도 지정 할 수 있 습 니 다. 지정 인용 은 ref 를 사용 하여 다른 Bean 정 의 를 참조 할 수 있 습 니 다. 나중에 상세 하 게 소개 할 것 입 니 다.
- <bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2">
-
- <constructor-arg index="0" value="Hello Spring!"/>
- bean>
어떻게 설정 하 는 지 알 겠 습 니 다. 예 를 들 어 실천 해 봅 시다.
(1) Bean class (HelloImpl 2. java) 를 준비 합 니 다. 이 종 류 는 빈 구조 기와 파 라 메 트릭 이 있 습 니 다.
- package cn.javass.spring.chapter2;
- public class HelloImpl2 implements HelloApi {
- private String message;
- public HelloImpl2() {
- this.message = "Hello World!";
- }
- Public HelloImpl2(String message) {
- this.message = message;
- }
- @Override
- public void sayHello() {
- System.out.println(message);
- }
- }
(2) 설정 파일 (resources / chapter 2 / instantiatingBean. xml) 에서 Bean 정 의 를 설정 합 니 다. 다음 과 같 습 니 다.
-
- <bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/>
-
-
- <bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2">
-
- <constructor-arg index="0" value="Hello Spring!"/>
- bean>
(3) 설정 이 완료 되 었 습 니 다. 테스트 코드 (Instantiating Container Test) 를 써 서 작업 여 부 를 봅 시다.
- @Test
- public void testInstantiatingBeanByConstructor() {
- //
- BeanFactory beanFactory =
- new ClassPathXmlApplicationContext("chapter2/instantiatingBean.xml");
- HelloApi bean1 = beanFactory.getBean("bean1", HelloApi.class);
- bean1.sayHello();
- HelloApi bean2 = beanFactory.getBean("bean2", HelloApi.class);
- bean2.sayHello();
- }
2. 정적 공장 방식 을 사용 하여 Bean 을 예화 합 니 다. 이 방식 을 사용 하면 필요 한 class 속성 을 지정 하 는 동시에 factory - method 속성 을 지정 하여 빈 을 예화 하 는 방법 을 지정 해 야 합 니 다. 또한 정적 공장 방법 을 사용 하여 방법 적 인 파 라 메 터 를 지정 할 수 있 습 니 다. spring IoC 용 기 는 이 속성 이 지정 한 방법 으로 Bean 을 가 져 올 것 입 니 다. 설정 은 다음 과 같 습 니 다.
(1) 정적 공장 코드 부터 살 펴 보 자! HelloApiStaticFactory:
- public class HelloApiStaticFactory {
- //
- public static HelloApi newInstance(String message) {
- // Bean
- return new HelloImpl2(message);
- }
- }
(2) 정적 공장 이 작성 되 었 습 니 다. 설정 파일 (resources / chapter 2 / instantiatingBean. xml) 에 Bean 정 의 를 설정 합 니 다.
-
- <bean id="bean3" class="cn.javass.spring.chapter2.HelloApiStaticFactory" factory-method="newInstance">
- <constructor-arg index="0" value="Hello Spring!"/>
- bean>
(3) 설정 이 완료 되 었 습 니 다. 테스트 코드 를 써 서 테스트 해 보 세 요. InstantiatingBeanTest:
- @Test
- public void testInstantiatingBeanByStaticFactory() {
- //
- BeanFactory beanFactory =
- new ClassPathXmlApplicationContext("chaper2/instantiatingBean.xml");
- HelloApi bean3 = beanFactory.getBean("bean3", HelloApi.class);
- bean3.sayHello();
- }
3. 인 스 턴 스 공장 방법 을 사용 하여 Bean 을 예화 합 니 다. 이런 방식 으로 class 속성 을 지정 할 수 없습니다. 이때 factory - bean 속성 을 사용 하여 공장 Bean, factory - method 속성 을 예화 Bean 의 방법 을 지정 해 야 합 니 다. 또한 인 스 턴 스 공장 방법 을 사용 하여 방법 적 인 파 라 메 터 를 지정 할 수 있 습 니 다. 방식 은 구조 기 를 사용 하 는 방식 과 마찬가지 로 다음 과 같이 설정 합 니 다.
(1) 실례 공장 클래스 코드 (HelloApiInstanceFactory. java) 는 다음 과 같다.
- package cn.javass.spring.chapter2;
- public class HelloApiInstanceFactory {
- public HelloApi newInstance(String message) {
- return new HelloImpl2(message);
- }
- }
(2) 설정 파일 (resources / chapter 2 / instantiatingBean. xml) 에서 Bean 정 의 를 설정 합 니 다.
- >
- <bean id="beanInstanceFactory"
- class="cn.javass.spring.chapter2.HelloApiInstanceFactory"/>
- >
- <bean id="bean4" factory-bean="beanInstanceFactory"
- factory-method="newInstance">
- <constructor-arg index="0" value="Hello Spring!">constructor-arg>
- bean>
(3) 테스트 코드 InstantiatingBeanTest:
- @Test
- public void testInstantiatingBeanByInstanceFactory() {
- //
- BeanFactory beanFactory =
- new ClassPathXmlApplicationContext("chapter2/instantiatingBean.xml");
- HelloApi bean4 = beanFactory.getBean("bean4", HelloApi.class);
- bean4.sayHello();
- }
위의 예 를 통 해 우 리 는 Bean 을 어떻게 예화 하 는 지 기본적으로 알 게 되 었 습 니 다. 여러분 은 알 고 있 습 니까? 이 세 가지 방식 은 설정 이 다 를 뿐, 획득 방식 으로 볼 때 전혀 다 르 지 않 습 니 다. 이것 도 Spring IoC 의 매력 입 니 다. Spring IoC 가 Bean 을 만들어 줄 것 입 니 다. 우 리 는 사용 만 하면 됩 니 다. 아주 간단 하지 않 습 니까?
2.3.5 작은 매듭
여기 서 우 리 는 Spring IoC 의 기본 적 인 부분 에 대해 이 야 기 를 끝 냈 습 니 다. IoC 용기 개념, 용기 실례 화, Bean 배치, 명명 및 실례 화, Bean 획득 등 을 포함 합 니 다. 지금까지 우 리 는 Bean 간 의 관 계 를 간단 한 실례 화 할 수 밖 에 없다 는 것 을 알 고 있 는 지 모 르 겠 습 니 다. 다음 장 에 서 는 Bean 간 의 관 계 를 설정 하 는 장, 즉 의존 하 는 것 입 니 다.주입
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring3 xml 이용해서 di 작업하기eclipse, spring3, java를 사용했습니다. D.I 란 Dependency Injection 의존성 주입이라는 뜻 클래스 밖에서 해당 클래스의 객체를 만들어 주는 것 xml을 아직 이용하는 곳도 있을 수...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.