토비의 스프링 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); |
◈ 코드 실행 결과
***.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() 메소드 오브젝트
'프로그래밍 언어 > Spring Framework' 카테고리의 다른 글
[인프런 김영한] 연관관계 매핑 기초 - 양방향 연관관계 (0) | 2021.02.03 |
---|---|
스프링 AOP 용어 , 스프링 네임스페이스 (0) | 2018.01.18 |
토비의 스프링 3.1 - 싱글톤, 싱글톤 패턴 (0) | 2017.12.21 |
객체지향 설계 5대 원칙 (SOLID) (0) | 2017.12.21 |
토비의 스프링 3.1 - 용어 정리 및 참조 (0) | 2017.12.01 |