핵심 : 빈팩토리, 어플리케이션컨텍스트
우리가 작성하였던 DaoFactory는 빈(bean)이 된다.
또한 UserDaoTest 는 ApplicationContext가 된다.
자바 코드를 스프링으로 변환해보자
- 기존의 DaoFactory
- 변경한 DaoFactory
- 기존의 UserDaoTest
public class UserDaoTest {
public static void main(String args[]){
UserDao userdao = new UserDaoFactory().UserDao();
}
}
- 변경한 UserDaoTest
public class UserDaoTest {
public static void main(String args[]){
ApplictaionContext context =
new AnnotaionConfigApplicationContext(DaoFactory.class);
UserDao dao = context.getBean("userDao", UserDao.class);
}
}
굳이 이렇게 이름을 붙이는 이유는?
UserDao dao = context.getBean("userDao", UserDao.class);
-> UserDao를 다르게 사용할 수 있기 때문에
getBean을 사용할 수 있는 이유는?
ApplictaionContext 가 getBean 인터페이스를 상속 받기 때문에
- 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다.
- 어플리케이션컨텍스트는 종합 IOC 서비스를 제공해준다.
- 어플리케이션컨텍스트는 빈을 검색하는 다양한 방법을 제공해준다.
오브젝트의 동일성
- 직접 생성한 DaoFactory 오브젝트 출력코드
DaoFactory factory = new DaoFactory();
UserDao dao1 = factory.userDao();
UserDao dao2 = factory.userDao();
System.out.println(dao1);
System.out.println(dao1);
출력결과
springbook.dao.UserDao@118f375
sptringbook.dao.UserDao@117a8bd
완전 다른 주소값을 출력!
스프링은 여러번 빈을 요청하더라도 동일한 오브젝트를 리턴합니다.
어떻게 이게 가능할까? : 싱글톤레지스트리 덕분
싱글톤레지스트리 : 스프링이 직접 싱글톤 형태읜 오브젝트를 만들고 관리한다.
장점 - private 생성자를 사용하지 않아도 된다. -> 평범한 자바 클래스를 싱클톤으로 만들어줍니다.
- 오브젝트를 생성하고 관리하는 모든 권한이 어플리케이션컨텍스트에 있기 때문이다.
가장 중요한 것은 싱글톤 패턴과 달리 스프링이 지지하는 객체지향적인 설계방식과 원칙 , 디자인패턴 등을 적용하는데
아무러 제약이 없다는 것이다.
|
'Spring > Spring' 카테고리의 다른 글
(SPRING) 스프링 AOP : 프록시 기반 AOP (0) | 2019.12.25 |
---|---|
(SPRING) 스프링 웹 애플리케이션 제거방법 (0) | 2019.12.25 |
(SPRING) AOP(Aspect-Oriented-Programming) (0) | 2019.12.24 |
(SPRING) 오브젝트와 의존관계 (일반적인 IOC version02) (0) | 2019.12.09 |
(SPRING) 오브젝트와 의존관계 (일반적인 IOC version01) (0) | 2019.11.13 |