본문 바로가기

JAVA/Spring

(28)
빈 설정 스프링 프레임워크 기초 정적 팩토리 메서드와 인스턴스 팩토리 메서드로 빈을 생성하는 방법 스프링 컨테이너는 인수가 없는 생성자 지원 여부에 상관없이 클래스의 인스턴스를 만들고 관리할 수 있다. 팩토리 클래스를 사용해 객체 인스턴스를 만드는 기존 자바 애플리케이션 있는경우, 스프링 컨테이너를 사용해 팩토리가 만든 객체를 관리할 수 있다. 정적 팩토리 메서드로 빈 초기화 public class FixedDepositDaoFactory { private FixedDepositDaoFactory() {} public static FixedDepositDao getFixedDepositDao(String daoType) { FixedDepositDao fixedDepositDao = null; if ("jdbc"..
IoC 컨테이너 계층 구조 - 토비의 스프링 IoC 컨테이너 계층 구조 빈을 담아둘 IoC 컨테이너는 애플리케이션마다 하나씩이면 충분하다. 그러나 한 개 이상의 IoC 컨테이너를 만들어두고 사용해야 할 경우가 있다. 부모 컨테이너를 이용한 계층구조 효과 루트 애플리케이션 컨텍스트 ^ ^ | | 애플리케이션 컨텍스트 A1 애플리케이션 컨텍스트 A2 ^ | 애플리케이션 컨텍스트 B1계층 구조 안의 모든 컨텍스트는 각자 독립적인 설정정보를 이용해 빈 오브젝트를 만들고 관리한다. 각자 독립적으로 자신이 관리하는 빈을 갖고 있긴 하지만 DI를 위해 빈을 찾을때 부모 애플리케이션 컨텍스트의 빈까지 모두 검색한다. 자신이 관리하는 빈 중에서 찾고 없으면 부모 컨텍스트(A1)에 빈 찾기 요청을 한다. 없으면 그 위의 부모 컨텍스트(루트)에게 다시 요청한다. 그래..
IoC 컨테이너와 DI - 토비의 스프링 IoC 컨테이너와 DI 스프링 애플리케이션에서는 오브젝트의 생성과 관계설정, 사용 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당한다. 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다. 스프링 컨테이너 = IoC 컨테이너 IoC를 담당하는 컨테이너를 빈 팩토리 또는 애플리케이션 컨텍스트라고 부른다. 스프링의 IoC 컨테이너는 일반적으로 애플리케이션 컨텍스트를 말한다. BeanFactory 인터페이스 ApplicatioinContext 인터페이스 빈 컨테이너 StaticApplicationContext ac = new StaticApplicationContext(); 여기에 IoC 컨테이너로서 동작하려면? 클래스와 설정메타정보가 필요하다. IoC 컨테이너의..
스프링3 XML를 이용한 설정 XML을 이용한 설정DaoFactory는 그 DI의 동작원리를 잘 활용한 독립적인 오브젝트 팩토리 클래스로 시작했지만, DI컨테이너인 스프링을 도입하면서부터 애노테이션을 추가해서 DI 갖업에 참고하는 일종의 참고정보로 사용되고 있다.본격적인 범용 DI컨테이너를 사용하면서 오브젝트 사이의 의존정보는 일일이 자바코드로 만들어주려면 번거롭다.DaoFactory를 자세히 살펴보면 대부분 틀에 박힌 구조가 반복된다.또한 DI 구성이 바뀔때마다 자바코드를 수정하고 클래스를 다시 컴파일하는 것도 귀찮은 작업이다.스프링은 DaoFactory와 같은 자바 클래스를 이용하는 것외에도, 다양한 방법을 통해 DI 의존관계 설정정보를 만들수 있다.가장대표적인 것이 XML이다.XML은 단순한 텍스트 파일이기 때문에 다루기 쉽다...
스프링 3 의존관계 주입(DI)의 응용 의존관계 주입의 응용런타임 시에 사용 의존관계를 맺을 오브젝트를 주입해준다는 DI 기술의 장점은 무엇?오브젝트 팩토리가 바로 이 DI방식을 구현한 것이니, 앞서 설명한 모든 객체지향 설계와 프로그래밍의 원칙을 따랐을 때 얻을 수 있는 장점이 그대로 DI 기술에도 적용될 것이다.코드에는 런타임 클래스에 대한 의존관계가 나타나지 않고, 인터페이스를 통해 결합도가 낮은 코드를 만들므로, 다른 책임을 가진 사용 의존관계에 있는 대상이 바뀌거나 변경되더라도 자신은 영향을 받지 않으며, 변경을 통한 다양한 확장 방법에는 자유롭다는게 지금까지 설명한 장점이었다.D사와 N사에 UserDao의 코드를 판매하는 경우가 아니더라도 UsrDao와 ConnectionMaker 사이에 적용된 DI는 여러가지 방법으로 유용하게 활..
스프링 3 의존관계 주입(DI) 의존관계 주입(DI) 제어의 역전(IoC)과 의존관계 주입객체지향적인 설계나, 디자인패턴, 컨테이너에서 동작하는 서버 기술을 사용한다면 자연스럽게 IoC를 적용하거나 그 원리로 동작하는 기술을 사용하게 될 것이다.DaoFactory처럼 객체를 생성하고 관계를 맺어주는 등의 작업을 담당하는 기능을 일반화한 것이 스프링의 IoC 컨테이너이다.IoC가 매우 느슨하게 정의돼서 폭넓게 사용되는 용어로 스프링을 IoC 컨테이너라고만 해서는 스프링이 제공하는 기능의 특징을 멱확하게 설명하지 못한다.스프링이 서블릿컨테이너처럼 서버에서 동작하는 서비스 컨테이너라는 뜻인지,단순히 IoC 개념이 적용된 템플릿 메서드 패턴을 이용해 만들어진 프레임워크인지,또 다른 IoC특징을 지닌 기술이라는 것인지 등 파악하기 힘들다.스프링..
스프링3 싱글톤 레지스트리와 오브젝트 스코프 싱글톤 레지스트리와 오브젝트 스코프DaoFactory를 직접사용하는 것과 @Configuration 애노테이션을 추가해서 스프링의 애플리케이션 컨텍스트를 통해 사용하는 것은 테스트 결과만 보면 동일한 것 같다.하지만 스프링의 애플리케이션 컨텍스트는 기존에 직접 만들었던 오브젝트 팩토리와는 중요한 차이점있다. 오브젝트의 동일성과 동등성자바에서 두 개의 오브젝트가 같은거라는 말은 주의해서 써야한다.자바에서는 두 개의 오브젝트가 완전히 같은 동일한(identical) 오브젝트라고 말하는 것과 동일한 정보를 담고 있는 (equivalent) 오브젝트라고 말하는 것은 분명한 차이가 있다.동일성(identity)비교와 동등성(equality)비교라고 한다.동일성은 == 연산자로, 동등성은 equals() 메서드로 ..
스프링3 제어의 역전(IoC) 스프링3 제어의 역전 IoC(inversion of Control) 팩토리객체의 생성방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 역할을 하는 오브젝트를 팩토리라고 부른다.단지 오브젝트를 생성하는 쪽과 생성된 오브젝트를 사용하는쪽의 역할과 책임을 깔끔하게 분리하려는 목적으로 사용하는 것이다.어떻게 만들지와 어떻게 사용할지는 분명 다른 관심이다. 예) 팩토리 역할 맡을 클래스 DaoFactorypublic class DaoFactory {public UserDao userDao {ConnectionMaker connectionMaker = new DConnectionMaker();UserDao userDao = new UserDao(connectionMaker);return userDao;}} 예) ..