List

월요일, 12월 07, 2015

객체를 통한 Bean 설정


  • 설정 Bean java
    • Configuration // 객체설정 class 에 선언 public class ConfigForLifeCycle
    • @Bean
    • public MyBean myBean(){
      • return new MyBean("하이맨") }
    • @Bean(initMethod="int", destroyMethod="destroy") public Person getPerson(){ return new Person(); }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Configuration
public class C01_config {

        @Bean(name="party")
        public Party getParty(){
            
            return new Party();
        }
        
        @Bean
        public Trip getTrip(){
            
            return new Trip();
        }
        
        @Bean(initMethod="init",destroyMethod="destroy")
        public DBConn getDBConn(){
            
            return new DBConn();
        }
}
cs

위 내용과 아래 내용은 완전히 같은내용 결국 같은내용을 xml에서 선언하느냐
java에서 선언하느냐의 차이

1
2
3
4
5
  <bean class="springwebPackage.a16_lifeCycle.DBConn"
 init-method="init" destroy-method="destroy"/>
     <bean class="springwebPackage.z02_vo.Party" id="party"/>
     <bean class="springwebPackage.z02_vo.Trip" id="trip"/>

cs

출력단 Main.java

1
2
3
4
5
6
    System.out.println("============= java 호출===========");
        
        AnnotationConfigApplicationContext ctx = 
new AnnotationConfigApplicationContext(C01_config.class);
        
        ctx.close();
cs

 AnnotationConfigApplicationContext

로 선언 필요

<bean class="springwebPackage.z02_vo.Party" id="party"/>에서
id = "party" 로 설정하는것과 @Bean(name="party")로 설정하는것은 같음
  • 범위가 다른 클래스의 내용을 처리하는 객체
  • singleton,prototype
    • 컨테이너 내용을 확인해서 처리하기

1
2
3
4
5
6
7
8
9
10
11
        @Bean(name="bearH") <--singleton
        public Bearhouse getBearhouse(){
            return new Bearhouse();
        }
        
        @Bean(name="bear")
        @Scope("prototype") <- prototype
        public Banana getBanana(){
            return new Banana();
        }
cs


빈 객체를 선언해놓은 config 파일 자체를 xml에 선언해주면
config파일 내부에 선언해놓은 빈객체를 기존처럼 사용할 수 있다.


1
2
<bean class="springwebPackage.a16_lifeCycle.C01_config"/>
cs




  • Bean 범위 설정 처리

    • VO
      • HappyHouse(singleton) - java config
      • Child(prototype)
      • EatingBread(위 두클래스를 연결처리)
      • Mom - xml에서 선언
    • Config
      • C03_Config.java( 컨테이너 설정파일 )
      • main_di06.xml(메인 컨테이너 설정파일)
    • A06_Main.java

  • Child.java
    • Child객체로 prototype으로 선언 ( 여러개가 만들어질수 있음)
1
2
3
4
5
6
7
8
    private int eatBread;
    private String name;
    
    public void eatBread(){
        eatBread++;
        System.out.println("빵을"+eatBread+"개 째 먹음 마싯슴");
    }
    
cs


  • HappyHouse.java
    • 집 객체로 빵의 전체갯수를 가지고 있으며 singleton(전체 빵의 갯수는 하나여야 하므로)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public HappyHouse() {
        breadCnt=20;
        System.out.println("빵집");
        System.out.println("빵이 : "+breadCnt+"개있다");
    }
    //할당되는 prototype객체의 개별적이 ㄴ내용처리
    public void showInfo(Child c){
        System.out.println(c.getName()+"이 빵을 머금");
        
        if(breadCnt > 0 ){
            c.eatBread();
            breadCnt--;
            System.out.println("현재 남은 빵 : "+ breadCnt);
        }else{
            System.out.println("빵없당");
        }
    }
cs

  • EatingBread.java
    • House 객체와 Child 객체를 엮어서 빵을 먹는 처리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//지정된 컨테이너의 bean 클래스 호출처리 ApplicationContextAware
public class EatingBread implements ApplicationContextAware{
    
    private HappyHouse house;
    
    private ApplicationContext act;
    
    @Override
    public void setApplicationContext(ApplicationContext ctx) 
throws BeansException {
        // TODO Auto-generated method stub
        act=ctx;
    }
    
    public void setHouse(HappyHouse house){
        this.house=house;
    }
    
    public void eatingFood(){
        String[] names={"티파니","태연","서현"};
        int len = names.length;
        Child[] children = new Child[len];
        이름과 같은 길이의 Child배열을 선언
        forint i = 0 ; i < 20 ; i ++){
            if(i < len){
                children[i] = act.getBean("child",Child.class);
                children[i].setName(names[i]);
배열의 길이만큼만 새로운 child객체를 생성함
            }

빵은 계속 먹음 태 티 서 , 태 티 서 순으로 먹음
            house.showInfo(children[i%len]);
        }
    }
}
cs


  • main_di

    1
    2
    3
       <context:annotation-config/>
    선언해 놓은 Config 파일을 class로 선언
    결국 Container에 직접 선언하는 것과 같은 효과
         <bean class="springwebPackage.a16_lifeCycle.C03_Config"/>


    cs

    • C03_Config.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
        
    @Bean(name="child")
        @Scope("prototype") < - prototype설정
        public Child getChild(){
            
            return new Child();
        }

      Scope를 설정해주지 않으면
    Default 로 Singleton type...

        @Bean(name="happyhouse")
        public HappyHouse getHappyHouse(){
            return new HappyHouse();
        }
        //scope 는 default 가 singleton
        
        @Bean(name="eatBread")
        public EatingBread getEatingBread(){
            EatingBread eb = new EatingBread();

            가져온 happyhouse를 셋해줌

            eb.setHouse(getHappyHouse());
                
            return eb;
        }
    cs


    확인예제 Vo team1 : 팀이름, 승 , 무 , 패 , point team2 : 팀이름, 승 , 무 ,패 , point VictoryResult 10게임 처리 팀1 vs 팀2 승률 @@ @@ 최종 승리 : 팀X! team.java Victoryresult.java













    댓글 없음:

    댓글 쓰기