Spring 의 xml 설정 Bean 대상 디 테 일

이 글 은 xml 를 사용 하여 Bean 대상 을 만 들 때 더욱 깊이 있 는 작업 내용(일부 속성 값)을 간단하게 요약 합 니 다.xml 설정 방식 은 비교적 주류 적 인 설정 방식 이기 때 문 입 니 다.
Bean 태그 속성
기본 예
우선,가장 간단 한 예:
<bean class="pojo.User"/>

그 를 이렇게 사용 해 야 한다.
ClassPathXmlApplicationContext ac =
                new ClassPathXmlApplicationContext("applicationContext.xml");

User dzzhyk= (User)ac.getBean(User.class);
System.out.println(dzzhyk);

빈 구조 기 를 사용 합 니 다.빈 대상 user 의 각 속성 은 null 입 니 다.
User{id='null', username='null', password='null'}

id 속성
bean 대상 에 id 를 설정 하여 쉽게 구분 할 수 있 습 니 다.보통 이렇게 합 니 다.
<bean id="user" class="pojo.User"/>

이렇게 하면 우 리 는 bean 을 가 져 올 때 id 를 지정 하여 가 져 올 수 있 습 니 다.이렇게 하면 더욱 정확 합 니 다.
ClassPathXmlApplicationContext ac =
                new ClassPathXmlApplicationContext("applicationContext.xml");

User dzzhyk= (User)ac.getBean("user");	//   id  
System.out.println(dzzhyk);

빈 구조 기 를 사용 합 니 다.빈 대상 user 의 각 속성 은 null 입 니 다.
User{id='null', username='null', password='null'}

scope 속성
scope 속성 은 두 개의 수치 만 있 습 니 다.singleton 또는 prototype 은 하나의 예/여러 예 를 대표 합 니 다.
기본 값:단일 예
<bean id="user" class="pojo.User" scope="singleton" />
<bean id="user" class="pojo.User" scope="prototype" />
  • 단일 예:service,dao,도구 류 는 단일 모드 를 사용 할 수 있 습 니 다.용기 가 초기 화 되 기 전에(게 으 른 로 딩 이 아니라면)bean 을 만 들 었 고 전체 응용 은 하나의 대상 만 있 습 니 다
  • 여러 예:controller 는 여러 예 를 사용 할 수 있 으 며,사용 할 때 만 대상 을 만 듭 니 다
  • lazy-init 속성
    bean 이 게 으 른 로 딩 여 부 는 scope="singleton"의 bean 대상 에 만 작용 합 니 다.사용 되 었 을 때 만 만 들 고 하나의 예 를 유지 합 니 다.
    <bean id="user" class="pojo.User" lazy-init="true" />
    

    init-method 와 destroy-method
  • init-method:지정 한 대상 을 만 든 후 실행 하 는 방법
  • destroy-method:bean 용 기 를 소각 할 때 실행 하 는 방법 을 지정 합 니 다
  • bean 대상 user 를 만 들 고 초기 화 방법 과 용기 소각 시 실행 방법 을 각각 my Init 와 my Destroy 방법 으로 지정 합 니 다.
    <bean id="user" class="pojo.User" init-method="myInit" destroy-method="myDestroy">
        <constructor-arg index="0" name="username" type="java.lang.String" value="dzzhyk"/>
        <constructor-arg index="1" name="password" type="java.lang.String" value="123456"/>
    bean>
    
    public void myInit(){
        System.out.println("user   ...");
    }
    
    public void myDestroy(){
        System.out.println("user   ...");
    }
    

    다음은 다음 코드 를 실행 하여 결 과 를 보십시오.
    ClassPathXmlApplicationContext ac =
            new ClassPathXmlApplicationContext("applicationContext.xml");
    
    User dzzhyk = (User)ac.getBean(User.class);
    System.out.println(dzzhyk);
    
    ac.close();     //     
    

    ac.close()방법 으로 용 기 를 닫 아야 합 니 다.destroy 방법 은 이미 시대 에 뒤떨어 졌 습 니 다.
    출력 결과:
    user   ...
    User{id='null', username='dzzhyk', password='123456'}
    user   ...
    

    factory-bean 과 factory-method
    공장 방식 으로 Bean 대상 을 만 들 수 있 습 니 다.
  • 정적 공장
  • 정적 공장 을 사용 하려 면 먼저 정적 공장 을 만들어 야 한다.
    public class Factory {
        public static User getUser(){
            return new User("dzzhyk", "123456");
        }
    }
    

    다음은 Bean 을 설정 할 때 클 라 스 가 정적 클래스 를 가리 키 는 것 을 직접 사용 하고 정적 공장 방법 을 제정한다.
    <bean id="user" class="Factory" factory-method="getUser"/>
    
  • 실례 공장
  • 인 스 턴 스 공장 은 먼저 공장 이라는 Bean 이 있 고 user 대상 bean 이 있 으 며 공장 bean 과 생 성 방법 을 지정 해 야 합 니 다.먼저 실례 공장 을 만 듭 니 다:
    public class Factory {
        public User getUser(){		//    static
            return new User("dzzhyk", "123456");
        }
    }
    

    그리고 xml 에서 Bean 대상 설정:
    <bean id="userFactory" class="Factory"/>
    <bean id="user" class="pojo.User" factory-bean="userFactory" factory-method="getUser"/>
    

    대상 을 다음 과 같이 가 져 올 수 있 습 니 다:
    User{id='null', username='dzzhyk', password='123456'}
    

    Bean 하위 태그
    property 태그
    방금 대상 은 속성 이 없습니다.property 탭 으로 값 을 부여 합 니 다.
    <bean id="user" class="pojo.User">
        <property name="id" value="1"/>
        <property name="username" value="dzzhyk"/>
        <property name="password" value="123456"/>
    bean>
    

    constructor-arg 태그
    bean 의 구조 함 수 를 지정 하지 않 으 면 기본적으로 빈 구조 기 를 사용 하고 constructor-arg 태그 로 bean 의 구조 함 수 를 지정 합 니 다.
    우선,User 클래스 에 새로운 구조 함 수 를 추가 합 니 다.
    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
    

    그리고 bean 대상 을 만 들 때 이 구조 함 수 를 지정 하여 각 위치의 매개 변수 유형 과 값 을 지정 하여 조작 할 수 있 습 니 다.
    <bean id="user" class="pojo.User">
        <constructor-arg index="0" name="username" type="java.lang.String" value="dzzhyk"/>
        <constructor-arg index="1" name="password" type="java.lang.String" value="123456"/>
    bean>
    
  • index:이 매개 변 수 는 구조 함수 에 있 는 위 치 를 확인 하고 구체 적 인 구조 기
  • name:이 매개 변수의 이름
  • type:이 매개 변수의 유형
  • value:이 매개 변수의 값(직접 값 을 부여 할 수 있 는 매개 변수 형식 이 라면 ref 참조)
  • ref:다른 bean 대상 을 참조 하여 작성 한 내용 은 이 bean 대상 의 id
  • 이렇게 최종 적 으로 얻 은 결 과 는 다음 과 같다.
    User{id='null', username='dzzhyk', password='123456'}
    

    constructor-arg 지정 집합 매개 변수
    list 태그
    만약 구조 기 가 들 어 와 야 할 매개 변수 가 하나의 대상 집합 이 라면 어떻게 사용 해 야 합 니까?
    user 대상 을 만 들 려 면 핸드폰 번호 목록 에 들 어가 구조 함 수 를 실행 해 야 한다 고 가정 합 니 다.핸드폰 번호 목록 은 하나의 목록 이 고 그 요소 유형 은 String 이 며 그 구조 함 수 는 다음 과 같 습 니 다.
    public User(String username, String password, List<String> phones) {
        this.username = username;
        this.password = password;
        this.phones = phones;
    }
    

    그러면 xml 를 설정 할 때 constructor-arg 를 사용 하여 설정 하려 면 이렇게 써 야 합 니 다.
    <bean id="user" class="pojo.User">
        <constructor-arg index="0" name="username" type="java.lang.String" value="dzzhyk"/>
        <constructor-arg index="1" name="password" type="java.lang.String" value="123456"/>
        <constructor-arg index="2" name="phones" type="java.util.List">
            <list value-type="java.lang.String">
                <value>123456789value>
                <value>987654321value>
                <value>135248912value>
            list>
        constructor-arg>
    bean>
    

    최종 획득 한 bean 대상 은 다음 과 같 습 니 다:
    User{id='null', username='dzzhyk', password='123456', phones=[123456789, 123456789, 123456789]}
    

    물론 여기 도 ref 를 사용 하여 다른 bean 으로 지정 할 수 있 습 니 다.
    map 태그
    전달 할 매개 변수 가 map 형식 이 라면 작업 도 대동소이 합 니 다.
    사용자 대상 을 만 들 려 면 성적 대조 표를 입력 해 야 한다 고 가정 합 니 다.k 는 과목 이름 이 고 v 는 성적 이 며 다음 과 같은 구조 함수 가 있 습 니 다.
    public User(String username, String password, Map<String, Integer> grades) {
     this.username = username;
        this.password = password;
        this.grades = grades;
    }
    

    그러면 xml 를 설정 할 때 다음 과 같은 설정 을 할 수 있 습 니 다.
    <bean id="user" class="pojo.User">
        <constructor-arg index="0" name="username" type="java.lang.String" value="dzzhyk"/>
        <constructor-arg index="1" name="password" type="java.lang.String" value="123456"/>
        <constructor-arg index="2" name="grades" type="java.util.Map">
            <map key-type="java.lang.String" value-type="java.lang.Integer">
                <entry key="  " value="80"/>
                <entry key="  " value="90"/>
                <entry key="  " value="100"/>
            map>
        constructor-arg>
    bean>
    

    최종 획득 한 bean 대상 출력 은 다음 과 같 습 니 다:
    User{id='null', username='dzzhyk', password='123456', grades={  =80,   =90,   =100}}
    

    그 밖 에 set 태그,array 태그 도 있 습 니 다.모두 유사 합 니 다.

    좋은 웹페이지 즐겨찾기