Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- AWS
- tiles.xml
- PL/SQL
- EC2
- docker
- websocket
- jQuery
- 웹게임
- JSP
- 암호화
- CSS
- express
- Ajax
- node.js
- 블록체인
- Spring
- 배포
- 비트코인
- HTML
- 도커
- Cookie
- 알고리즘
- SQL
- Servlet
- JavaScript
- model1
- RDS
- phaser
- autowired
- 웹소켓
Archives
- Today
- Total
記錄
Spring) getBean과 객체의 생성 본문
ApplicationContext context =
new GenericXmlApplicationContext("classpath:DI_05_Spring/DI_05.xml");
System.out.println("before : mybean객체");
MyBean mybean = context.getBean("mybean",MyBean.class);
System.out.println("after : mybean객체 : " + mybean);
System.out.println("before : mybean2객체");
MyBean mybean2 = context.getBean("mybean",MyBean.class);
System.out.println("after : mybean2객체 : " + mybean2);
////////////////////////////////////////////////////////////
System.out.println("before : mybean3객체(생성자)");
MyBean mybean3 = context.getBean("mybean2",MyBean.class);
System.out.println("after : mybean3객체(생성자): " + mybean3);
<bean id="mybean" class="DI_05_Spring.MyBean"></bean>
<bean id="mybean2" class="DI_05_Spring.MyBean">
<constructor-arg value="hong" />
</bean>
public class MyBean {
public MyBean() {
System.out.println("Default");
}
public MyBean(String name) {
System.out.println("Overloading : " + name);
}
}
console
Default
Overloading : hong
before : mybean객체
after : mybean객체 : DI_05_Spring.MyBean@5cb9f472
before : mybean2객체
after : mybean2객체 : DI_05_Spring.MyBean@5cb9f472
before : mybean3객체(생성자)
after : mybean3객체(생성자): DI_05_Spring.MyBean@cb644e
>> 정리 <<
1. ApplicationContext을 만들면 xml에 설정한 bean이 모두 '일단' '생성'된다.
ApplicationContext context =
new GenericXmlApplicationContext("classpath:DI_05_Spring/DI_05.xml");
이것이 실행되면 xml에서 bean으로 설정된 클래스들을 일단 생성하게 된다.(만들어 놨다가 getBean시에 꺼내줘야 하기 때문에 미리 만들어 놓는 의미로 이해) 따라서 위 두 줄의 코드만으로 xml에 bean으로 설정된 모든 객체를 생성하게 되는 것이다. 그렇기 때문에 생성자 내부에 넣어둔 로직들이 실행되는 것이고 여기서는 sysout이 설정되어 있기 때문에 "Default"와 "Overloading : hong"이 콘솔에 찍히는 것이다.
2. 같은 bean에서 꺼내온 클래스는 아무리 여러번 꺼내도 결국 동일한 객체를 꺼내오게 된다
System.out.println("before : mybean객체");
MyBean mybean = context.getBean("mybean",MyBean.class);
System.out.println("after : mybean객체 : " + mybean);
System.out.println("before : mybean2객체");
MyBean mybean2 = context.getBean("mybean",MyBean.class);
System.out.println("after : mybean2객체 : " + mybean2);
before : mybean객체
after : mybean객체 : DI_05_Spring.MyBean@5cb9f472
before : mybean2객체
after : mybean2객체 : DI_05_Spring.MyBean@5cb9f472
결국 같은 bean을 getBean 했기 때문에 주소값을 뽑아보면 똑같은 것을 알 수 있다. bean에 미리 만들어둔 객체를 getBean으로 가져오는 것이기 때문에 아무리 여러번 getBean으로 가져와도 결국 동일한 객체를 가져오는 것일 뿐이다.
3. 오버로딩된 생성자를 이용하면 새로운 객체가 생성된다
System.out.println("before : mybean3객체(생성자)");
MyBean mybean3 = context.getBean("mybean2",MyBean.class);
System.out.println("after : mybean3객체(생성자): " + mybean3);
<bean id="mybean2" class="DI_05_Spring.MyBean">
<constructor-arg value="hong" />
</bean>
public MyBean(String name) {
System.out.println("Overloading : " + name);
}
'Web > Spring framework' 카테고리의 다른 글
Spring) .properties 파일의 활용 (0) | 2018.04.28 |
---|---|
Spring) Properties Class의 활용 (0) | 2018.04.28 |
Spring) .xml을 통한 List 세팅 (0) | 2018.04.28 |
Spring) .xml을 통한 HashMap 세팅 (0) | 2018.04.28 |
Spring) .xml을 통한 변수값 설정, 생성자 활용 (0) | 2018.04.28 |
Comments