객체 사이의 의존 관계를 객제 자신이 아닌 외부의 조립기(컨테이너)가 수행하는 개념.
설정 파일이나 어노테이션을 이용해 관계 설정
Class A에서 B b = new B(); 처럼 코드에 직접 명시하는 건 DI가 아님
-> 의존성을 낮추기 위해 인터페이스를 사용
객체간의 의존 관계는 생성자와 프로퍼티 설정의 2가지 방식이 존재
1. 생성자 방식
생성자의 매개변수를 통해 객체(bean)을 전달(주입)받는다.
xml상에서 <constructor-arg>태그 사용
빈 객체 <con....arg ref="....">기본 데이터 타입 or string <con ~ arg value="....">value는 string 타입으로 처리<cons ~ arg><value type="long">2000</value></con~arg>
2. 프로퍼티 방식
setXXX() 형태의 설정 메소드를 통해서 필요한 객체와 값을 전달받는다. - XXX는 프로퍼티 이름
xml에서 <property name="프로퍼티 이름"> 으로 지정
3. xml의 네임스페이스를 이용한 프로퍼티 설정
<xmlns:p~~~>
<bean id="~~~~" p:ibatisDao-ref="dao">
ibatisDao 는 프로퍼티 이름, dao는 전달할 객체(bean)
Bean 객체 생성 및 사용
Bean생성
<bean id="~~~~" class="~~~~~">
이 식별값을 getBean("id") 메소드를 이용하여 컨테이너로부터 객체를 가져와 사용
<bean> 태그의 factory-method 속성 값으로 static 메소드를 지정함으로써 빈을 생성하도록 설정 가능.
Bean의 라이프 사이클
<bean> 태그의 init-method 와 destory-method 속성을 설정함으로써 스프링 컨테이너가 Bean을 생성(종료)시 해당 메소드를 실행하게 한다.
initializing Bean 인터페이스 - afterPropertiesSet()
<bean> 태그의 factory-method 속성 값으로 static 메소드를 지정함으로써 빈을 생성하도록 설정 가능.
Bean의 라이프 사이클
<bean> 태그의 init-method 와 destory-method 속성을 설정함으로써 스프링 컨테이너가 Bean을 생성(종료)시 해당 메소드를 실행하게 한다.
initializing Bean 인터페이스 - afterPropertiesSet()
Spring 자체에서 제공하는 초기화 메소드객체를 생성하고 프로퍼티를 초기화하고, 컨테이너 관련 설정을 완료한 뒤에 호출된다.
DisposableBean 인터페이스 - destroy()
빈 객체를 컨테이너에서 제거하기 전에 호출하여 빈 객체가 자원을 반납할 수 있도록 함.
AOP(Aspect Oriented Object) 지원 - 관점 지향
해당 소스가 핵심 기능을 담당하는 코드인지, 공통적인 기능을 담당하는지 구분하는 것.
용어
advice -> 공통기능을 구현한 것(class)
target -> advice가 적용될 객체
joinpoint -> advice가 적용된 지점(target의 메소드)
pointcut -> 실제로 advice가 적용된 joinpoint
advisor(=aspect) -> advice + pointcut
weaving -> advice를 핵심 로직 코드에 적용하는 것.
스프링에서의 구현 방법
target -> advice가 적용될 객체
joinpoint -> advice가 적용된 지점(target의 메소드)
pointcut -> 실제로 advice가 적용된 joinpoint
advisor(=aspect) -> advice + pointcut
weaving -> advice를 핵심 로직 코드에 적용하는 것.
스프링에서의 구현 방법
1. 스프링 API
2. POJO클래스(Plain Old Java Object)
3. AspectJ5에서 정의한 @Aspect 어노테이션 기반의 AOP 구현.
2. POJO클래스(Plain Old Java Object)
3. AspectJ5에서 정의한 @Aspect 어노테이션 기반의 AOP 구현.