토비의 스프링 3.1 - DaoFactory 오브젝트 팩토리와 스프링 애플리케이션 컨텍스트의 동작방식 차이

2017. 12. 1. 18:04프로그래밍 언어/Spring Framework

토비의 스프링 3.1 - 

DaoFactory 오브젝트 팩토리와 스프링 애플리케이션 컨텍스트의 동작방식 차이


◈ 의문1

DaoFactory의 userDao()를 여러 번 호출했을 때 동일 한 오브젝트 인가?

1
2
3
4
5
DaoFactory factory = new DaoFactory();
UserDao dao1 = factory.userDao();
UserDao dao2 = factory.userDao();
System.out.println(dao1);
System.out.println(dao2);

cs


 코드 실행 결과

 ***.dao.UserDao@118f375

 ***.dao.UserDao@128d475


 결론

두 개는 각기 다른 값을 가진, 동일하지 않는 오브젝트. 오브젝트가 두 개가 생겼다.

userDao를 매번 호출하면 계속 해서 새로운 오브젝트가 생긴다.




◈의문2

ApplicationContext의 getBean() 메소드를 사용하면 어떨까?

1
2
3
4
5
6
7
ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
 
UserDao dao3 = context.getBean("userDao",UserDao.class);
UserDao dao4 = context.getBean("userDao",UserDao.class);
 
System.out.println(dao4);
System.out.println(dao3);

cs


 코드 실행 결과

 ***.dao.UserDao@ee22f7

 ***.dao.UserDao@ee22f7


 결론

두 오브젝트의 출력값이 같기 때문에 두 번 호출해서 가져온 오브젝트가 동일하다.

dao3 == dao4를 출력하면 true가 출력이 된다.



 최종 결론 

스프링은 여러번에 걸쳐 빈을 요철하더라도 매번 동일한 오브젝트를 돌려준다.

단순하게 getBean()을 실행할 때마다 userDao()메소드를 호출하고 매번 new에 의해 새로운 UserDao가 만들어지지 않는다.



☞ 키워드 : 스프링 애플리케이션 컨텍스트의 동작방식, getBean() 메소드 오브젝트