2. 자바 개발 간소화
종속객체 주입(DI: Dependency Injection)
강한 결합을 제거하자
AOP(Aspect Orientation Programming)
횡단 관심사를 모듈화 하자
Spring템플릿
템플릿을 이용한 상투적인 코드 제거
3. 종속객체 주입(DI: Dependency Injection)
강한 결합을 제거하자
원정을 떠나는 기사
강한 결합
Public class Knight {
private Quest quest;
public Knight() {
quest = RescueDamselQuest(); RescueDamselQuest에 강하게 결합된다.
}
}
종속객체 주입
Public class Knight {
private Quest quest;
public Knight(Quest quest) {
this.quest = quest; Quest가 주입된다.
}
}
Knight
RescueDamsel
Quest
Knight
RescueDamsel
Quest
SlayDragon
Quest
4. 종속객체 주입(DI: Dependency Injection)
Spring의 XML설정을 이용한 종속객체 주입(wiring)
Spring container가 객체(bean)를 관리한다.
<beans>
<bean id=“knight” class=“com.spring.knights.BraveKnight”>
<constructor-arg ref=“quest” /> “quest” bean 주입
</bean>
<bean id=“quest” class=“com.spring.knights.SlayDragonQuest” /> SlayDragonQuest 생성
</beans>
Spring container
Brave
Knight
SlayDragon
Quest
…
…
…
…
…
…
…
8. AOP(Aspect Oriented Programming)
어드바이스(Advice)
Aspect가 무엇을 해야하는지 정의
조인포인트
어드바이스를 끼워넣을 지점(point)
포인트컷
Aspect의 대상을 정의
Aspect가 advice할 joinpoint영역을 좁힌다.
위치 특징
이전(before) 대상 메소드가 호출되기 전에 어드바이스 수행
이후(after) 결과에 상관없이 대상 메소드 완료 후 어드바이스 수행
반환 이후(after-returning) 대상 메소드가 성공적으로 완료된 후 어드바이스 수행
예외 발생 이후
(after-throwing)
대상 메소드가 예외를 던진 후 어드바이스 수행
주위(around) 대상 메소드 호출 전과 후에 어디바이스 수행