- 설정 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배열을 선언
for( int 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
댓글 없음:
댓글 쓰기