노승현
ASPECT 란? 본문
IoC
new 를 컨테이너가 대신 해준다
서블릿(FrontController)을 new == 서블릿 컨테이너(톰캣,웹 서버)
POJO(DAO,Action, …) 를 new == 스프링 컨테이너
컨테이너 -> .xml(설정파일)
DI(의존 주입) 를 통한 낮은 결합도 보장
AOP
C : 인증 로깅 C 트랜잭션 예외처리
R : 로깅 R
U : 인증 로깅 보안 U 트랜잭션 예외처리
D : 인증 로깅 보안 D 트랜잭션 예외처리
공통 로직
횡단 관심
비즈니스 메서드(비즈니스 로직, 핵심 관심, CRUD)에서 횡단 관심(공통 로직)을 분리
관심 분리(Separation of Concern) : AOP 의 시작
로직(관심)들끼리 코드를 관리 -> 높은 응집도 보장
항상 찍는 로그는 공통 로직이네?
Advice 클래스로 분리 == 관심 분리
Advice 를 Service의 멤버변수로 설정 -> 의존 관계
비즈니스 로직 수행 전에 호출
Static 은 실행하면 프로그램 종료까지 살아있음
같은 기능, 같은 타입의 여러 객체 중에서 1개를 선택하는 경우 -> <bean> 유리
Phone -> @Component
aw vs gw -> <bean>
조인포인트
어플리케이션에 존재하는 모든 비즈니스 메서드
포인트컷
횡단 관심을 연결할 비즈니스 메서드
횡단 관심을 연결할 대상 클래스(객체)
<aop:pointcut id="aPointcut" expression="execution(* spring.biz..*Impl.*(..))"/>
* 타입 상관 없음
.. 파일 전체
(..) 인자개수 상관 없음
<aop:pointcut id="bPointcut" expression="execution(* spring.biz..*Impl.select*(..))"/>
select 로 시작하는 메서드
애스팩트(aspect) 포인트컷(핵심로직)과 어드바이스(횡단관심)의 조합
포인트컷과 어드바이스의 결합(위빙)
어드바이스 동작 시점 애스팩트(결합, 위빙) 설정할 때 함께 설정함
Before
비즈니스 메서드 수행 전
After
finally, 비즈니스 메서드 수행 후
After-returning
비즈니스 메서드 return 반환 후
After-throwing
catch, 비즈니스 메서드 예외발생 시
Around
비즈니스 메서드 수행 전후로 접근 가능
핵심로직의 성능평가에 많이 사용
일반적으로 before 을 많이 씀
R 핵심 로직을 수행할 때에만
버전업 된 로그가 추가로 출력될 수 있게
포인트컷과 어드바이스를 에스팩트처리
boardDAO ~~가 나오면 다음 문장이 에러
<bean class="com.spring.biz.common.LogAdvice" id="logAdvice" />
<bean class="com.spring.biz.common.AfterReturningAdvice" id="ara" />
<bean class="com.spring.biz.common.AfterThrowingAdvice" id="ata" />
<bean class="com.spring.biz.common.AroundAdvice" id="aa" />
<aop:config>
<aop:pointcut id="aPointcut" expression="execution(* com.spring.biz..*Impl.*(..))" />
<aop:pointcut id="bPointcut" expression="execution(* com.spring.biz..*Impl.select*(..))" />
<aop:aspect ref="aa">
<aop:around pointcut-ref="aPointcut" method="aroundPrintLog" />
</aop:aspect>
<aop:aspect ref="ara">
<aop:after-returning pointcut-ref="bPointcut" method="afterReturningPrintLog" />
</aop:aspect>
<aop:aspect ref="ata">
<aop:after-throwing pointcut-ref="aPointcut" method="printException" />
</aop:aspect>
</aop:config>
</beans>
"클래스를 통해 객체를 생성한다."
클래스 변수
자료형 붕어빵
붕어빵틀 인스턴스
@Repository << BoardDAO 클래스의 객체를 new 해주는 @
public class BoardDAO
@Repository("boardDAO") << BoardDAO 클래스의 객체를 new 해주는 @
<< 객체명은 boardDAO
public class BoardDAO == BoardDAO boardDAO=new BoardDAO();
<aop:aspectj-autoproxy /> << AOP 설정을 어노테이션으로 하겠다.
@Service
LogAdvice = boardService 랑 결합중이라 component 보다 service가 낫다.
바인딩
메서드를 호출했을 때,
현재 메모리에 존재하는 객체를 실제로 수행하는 것
다형성(상속)을 구현한 상황에서 사용가능
'Spring' 카테고리의 다른 글
DBCP (0) | 2024.03.05 |
---|---|
Spring MVC ver.2 로 변환하기 (1) | 2024.03.05 |
Spring 파일 생성 및 흐름 이해 (2) | 2024.02.28 |
DI 의존성 주입이란? (0) | 2024.02.28 |
Spring 이란? (1) | 2024.02.27 |