자바 기반 Bean 의 생 성,포 지 셔 닝 및 사용

9683 단어 JavaSpringBean창설
머리말
빈 은 스프링 IoC 용 기 를 예화,조립,관리 하 는 대상 이다.Spring 에서 클래스 의 실례 화,의존의 실례 화,의존의 전입 은 모두 Spring Bean 용기 에 의 해 제어 되 며,new 방식 으로 대상 을 실례 화 하 는 것 이 아니 라 비구 조 함수 방법 으로 의존을 전입 하 는 등 일반적인 방식 이다.이렇게 하면 쓰레기 회수 가 대량의 실례 에 대한 회수 작업 을 줄 일 수 있다.
예 를 들 어 AAA,BBB,CCC 세 가지 유형 을 사용 했다.그 중에서 AAA 와 BBB 는 평등 한 두 가지 유형 으로 서로 호출 할 수 있다.CCC 는 BBB 를 구조 적 매개 변수 로 하 는 클래스 입 니 다.
2.자동 조립 Bean
2.1 등록 Bean
Bean 을 만 들 려 는 모든 클래스 에@Component 를 추가 하면 자동 검색 이 시 작 될 때 클래스 를 Bean 으로 자동 으로 등록 할 수 있 습 니 다.
스 캔 은 기본적으로 닫 힙 니 다.스 캔 기능 을 열 려 면 가방 안의 클래스 에 주 해 를 추가 해 야 합 니 다@Componentscan.또한 항목 마다 설정 클래스 가 필요 하기 때문에 주석@Componentscan 을 설정 클래스 에 추가 하기 로 약속 합 니 다.
암시 적 정의 방법 이기 때문에 일정한 제한 이 있다.예 를 들 어 같은 가방 에
예 를 들 어 AAA 류 에 주 해 를 추가 합 니 다@Component

@Component
 
Public class AAA{
 
}
주해 스캐닝 기능 이 켜 지면 이 주해 가 추 가 된 모든 종 류 를 자동 으로 검색 합 니 다.
하지만 스 캔 기능 은 기본적으로 꺼 져 있 습 니 다.AAA 클래스 와 같은 패키지 에 새로운 클래스 인 AConfig 를 추가 하고@Componentscan 을 추가 하면 자동 검색 기능 을 시작 할 수 있 습 니 다.Spring 은 이 가방 에@Component 가 있 는 모든 클래스 를 자동 으로 검색 합 니 다.AConfig 의 내용 은 스 캔 기능 과 무관 합 니 다.
[스 캔 을 시작 하 는 클래스 이름 은 AConfig 입 니 다.규정 이 아 닌 습관 입 니 다.A 와 관련 이 있 고 config 와 관련 이 있 기 때 문 입 니 다.]
자동 검색 을 위 한 다른 방법:XML 설정
XML 파일 에 추가

<context : component-scan base-package="XXX">
이 중 XXX 는 AAA 가 있 는 가방 으로 이 가방 에 대한 자동 검색 을 시작 할 수 있 습 니 다.
@Componentscan 은 기본적으로 이 가방 의 클래스 설명 을 스 캔 합 니 다.다른 가방 을 스 캔 하려 면 인자 basePackages="XXX"를 추가 해 야 합 니 다.XXX 는 스 캔 하고 싶 은 가방 입 니 다.마찬가지 로 여러 개의 가방 을 지정 하여 스 캔 하려 고 합 니 다:@Componentscan(basePackage={"XXX","XX2"}),큰 괄호 로 모든 가방 을 확대 합 니 다.그 중에서 basepackage 는 생략 할 수 있 고 가방 이름 만 쓸 수 있 습 니 다.
문자열 을 매개 변수 로 지정 할 때 안전 하지 않 기 때문에 가방 의 클래스 를 지정 하여 가방 을 표시 하 는 방법 이 있 습 니 다.@Component 의 인 자 를(basePackageClass={AAA.class,BBB.class}로 바 꾸 면 AAA 와 BBB 가 있 는 가방 을 스 캔 할 수 있 습 니 다.
유닛 테스트 시 테스트 클래스 에@ContextConfiguration(class=Aconfig.class)을 추가 하여 설정 클래스 를 지정 합 니 다.즉,@Componentscan 이 있 는 클래스 는 지정 한 설정 클래스 로 Bean 을 관리 할 수 있 습 니 다.
자동 으로 만들어 지 는 빈 의 ID 는 클래스 이름과 일치 하 는데,이니셜 이 소문 자로 바 뀌 는 것 이다.AAA 와 같은 Bean 은 aAA 입 니 다.나머지 자 모 는 대문자 가 아니 라 변 하지 않 는 다)
Bean 의 ID 는@Component 에서 생 성 되 기 때문에@Component 에서 Bean 의 ID 를 지정 할 수 있 습 니 다.@Component("IDofA")는 AAA 류 Bean 의 ID 를 IDofA 로 지정 할 수 있 습 니 다.
2.2 Bean 사용
빈 을 만 들 고 빈 을 사용 해 야 돼 요.
Bean 을 사용 하 는 방법 에@Autowired 를 추가 하여 Bean 이 있 는 클래스 대상 에 들 어 갈 때 Bean 의 주입 을 실현 할 수 있 습 니 다.
프 리 젠 테 이 션 에서 주입 이 있어 도 매개 변수 가 들 어 와 야 한 다 는 것 을 발견 했다.

주 해 를 적용 하지 않 는 것 과 는 달리 주입 을 사용 하면 주입 되 는 방법 을 사용 할 때 이 방법의 유형 을 예화 할 필요 가 없다 는 것 이다.

이 프로그램 에서 useAxe()방법 은 Axe 클래스 에 사용 되 었 으 나 Axe 클래스 를 예화 하지 않 았 습 니 다.
여기 서@Autowired 를 사용 합 니 다.효 과 는 player.play()를 사용 할 때 plyaer 를 예화 할 필요 가 없습니다.

Required=flase 는 빈 이 없 을 때 오 류 를 보고 하지 않 고 추천 하지 않 습 니 다.
3.수 동 조립
주석 이 있 는 자바 류 를 사용 하거나 XML 파일 에 빈 의 등록 과 주입 을 명시 적 으로 설명 합 니 다.
3.1 자바 클래스
자동 조립 은 원본 코드 의 클래스 에 주 해 를 추가 해 야 하기 때문에 자바 류 주해 법 은 원본 코드 를 수정 할 수 없 는 경우 에 적용 된다.
두 단계 로 나 누 기:Bean 생 성과 Bean 주입
@Bean 주석 을 사용 하여 Bean 을 생 성 합 니 다.
만약 AAA 류 가 BBB 류 의 대상 을 사용한다 면.AConfig 에 다음 과 같은 방법 을 추가 해 야 합 니 다.

@Bean
 
public BB bBB(){
 
    return new BBB();
 
}
습관 에 따 르 면 이 방법의 이름과 인용 해 야 할 클래스 가 일치 하여 이름 을 인용 할 때 어떤 종 류 를 나타 내 는 지,이니셜 만 소문 자로 변 한다.
@Bean 은 spring 이 방법 을 알려 주 고 대상 을 되 돌려 줍 니 다.spring 은 이 대상 을 Bean 으로 등록 합 니 다.기본 적 인 상황 에서 Bean 의 ID 와 설정 방법 이 동일 하 며@Bean 의 name 매개 변수 로 도 수정 할 수 있 습 니 다.

@Bean(name="IDofB")
 
public BBB bBB(){
 
    return new BBB();
 
}
설정 방법 에서 BB 인 터 페 이 스 를 구현 한 클래스 BBC 와 BBD 는 모두 되 돌아 오 는 대상 으로 빈 으로 등록 할 수 있다.

@Bean
 
public BB otherBB(){
    If(num>10)
        return new BBC();
    Else
        return new BBD();
}
이로써 설정 방법 에서 서로 다른 대상 을 되 돌려 주 고 되 돌아 오 면 빈 으로 등록 할 수 있다.상대 적 으로 하나의@Bean 은 상황 에 따라 여러 Bean 인 스 턴 스 중 하 나 를 되 돌려 줄 수 있 고 하나의 가능성 도 나타 날 수 있 습 니 다.여러@Bean 은 각자 조건 을 만족 시 켜 같은 Bean 인 스 턴 스 를 되 돌려 주 었 습 니 다.
예 를 들 면:
하나의 클래스 CCC 가 실례 화 될 때 BBB 를 매개 변수 로 하고 구조 함수 가

CCC(BBB){
 
    This.bbb=BBB;
 
}
그러면 여러 개의 CCC 클래스 인 스 턴 스 가 같은 BBB 를 동시에 호출 하 는 현상 이 나타 날 것 이다.

@Bean
public CCC cCC(){
 
    return new CCC(BBB());
}
 
 
@Bean
public CCC anotherCCC(){
 
    return new CCC(BBB());
}
상기 두 가지 방법 은 모두 같은 실례,즉 new CCC(BBB()를 되 돌려 주 었 다.이때 spring 은 두 번 째 BBB()에서 발생 하 는 BBB 대상 을 차단 하고 두 개의 CCC 류 방법 인 cCC()와 anotherCCC()를 같은 BBB 대상 으로 호출 합 니 다.
XML 파일
XML 파일 에을 쓰 면 Bean 을 생 성 할 수 있 습 니 다.

<Bean id="IDofCCC" class="packagename.CCC">
id 를 지정 하지 않 으 면 id 는 자동 으로 packagename.CCC\#0 으로 변 합 니 다.packagename.CCC 클래스 를 참조 할 때 새로운 Bean 대상 id 를 packagename.CCC\#1 로 명명 합 니 다.자동 으로 이름 을 지 을 때 번호 가 늘 어 나 는 것 이다.
spring 은을 발견 하면 클래스 의 구조 방법 을 자동 으로 실행 하여 인 스 턴 스 를 생 성하 여 Bean 으로 등록 합 니 다.
BBB 를 인용 한 CCC 를 설명 할 필요 가 있다 면

<Bean id="IDofCCC" class="packagename.CCC">
    <constructor-arg ref="bBB" />
</Bean>
그 중에서 bBB 는 BBB 류 의 Bean 으로 이 Bean 이 CCC 에 주입 되 었 다.
탭 은 c 네 임 스페이스 로 간략하게 쓸 수 있 습 니 다.구체 적 인 예 를 들다.
인용

이 탭 은 CDPlayer 클래스 에 compactDisc 를 주입 하여탭 대신 c 네 임 스페이스 를 사용 합 니 다.

그 중에서 cd-ref 의 cd 는 CDPlayer 의 구조 방법의 매개 변수 입 니 다.디 버 깅 과 패 키 징 에서 코드 의 인 자 를 XML 에 두 는 것 은 안전 하지 않 습 니 다.그래서 매개 변수 cd 대신 코드 를 사용 할 수 있 습 니 다.

하나의 구조 방법 만 있 을 때 도 번 호 를 생략 할 수 있다.

일반적인 기호 로 돌아 가면 상례 의 BBB 는 이미 할당 되 거나 구 조 될 때 정 의 된 속성 이 있 습 니 다.만약 우리 가 클래스 BBC 를 주입 해 야 하고 BBC 가 구조 할 때 인 자 를 입력 해 야 한다 면에 인 자 를 입력 할 수 있 습 니 다.

<Bean id="IDofCCC" class="packagename.CCC">
 
    <constructor-arg value="vob1" />
    <constructor-arg value="vob2" />
    <constructor-arg value="vob3" />
 
</Bean>
이 예 는 CCC 류 의 Bean 을 만 들 고 CCC 를 구성 할 때 세 개의 인자 가 필요 하 다 는 것 이다.에서 value 를 사용 하여 세 개의 인 자 를 지정 합 니 다.
할당 작업 도 c 네 임 스페이스 로 간소화 할 수 있 습 니 다.위의 구체 적 인 예 로 설명 할 수 있 습 니 다.
태그 로 성명 인용 시 BlankDisc 에 두 개의 값 을 부 여 했 습 니 다.

간 화 된 c 네 임 스페이스:

그 중에서 BlankDisc 류 구 조 는 title 과 artist 두 개의 매개 변수 가 있 는데 c:의 두 가지 속성 에 딱 대응 합 니 다.
당연 하 다
태그 가 이름 없 이 값 을 부여 할 수 있 으 니 c 네 임 스페이스 도 가능 합 니 다.

속성 이름 의 위치 번 호 를 순서대로 할당 하 는 역할 도 할 수 있 습 니 다.
속성 이 하나 밖 에 없 으 면 번호 도 생략 할 수 있 습 니 다.

인 자 를 입력 하지 않 아 도를 대체 할 수 있 습 니 다.훨씬 간결 할 것 입 니 다.
property 태그

첫 번 째 compact 는 CDPlayer 의 구조 방법 에서 매개 변수의 이름 이 고 두 번 째 compact 는 인 용 된 클래스 입 니 다.간 화 된 p 네 임 스페이스 도 p:시작

5.설정 가 져 오기
5.1 자바 클래스
여러 개의 빈 을 등록 하 는 방법 이 서로 다른 설정 클래스 에 있다 면@import 를 통 해 BConfig 를 CConfig 에 도입 할 수 있 습 니 다.
예 를 들 어 BBB 에 설정 클래스 가 있다 면

@Configuration
public class BConfig {
    @Bean
    public BBB bBB( ) {
 
        return new BBB ( ) ;
    }
}
BBB 를 CConfig 로 가 져 오기

@Configuration
@import(BConfig.class)
public class CConfig {
    @Bean
    public CCC cCC(BBB bBB) {
 
        return new CCC (bBB) ;
    }
}
이렇게 하면 설정 클래스 를 뛰 어 넘 어 Bean 을 사용 할 수 있 습 니 다.
이런 인용 은 1 대 1 만 사용 할 수 있 는 것 이 아니다.BConfig 와 CConfig 를 모두 참조 하 는 새로운 설정 클래스 도 정의 할 수 있 습 니 다.
설정 클래스 로 생 성 된 Bean 을 가 져 왔 습 니 다.XML 설정 의 Bean 을 가 져 오 려 면@importResource 가 필요 합 니 다.설정 클래스 에 주석 추가@importResource("classpath:Bconfig.xml")
XML 로 가 져 오기
마찬가지 로탭 을 사용 하면 XML 파일 에 다른 XML 파일 을 가 져 올 수 있 습 니 다.

<import resource="Bconfig.xml" />
자바 기반 Bean 의 생 성,포 지 셔 닝,사용 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Bean 의 생 성,포 지 셔 닝 과 사용 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기