-
[WEB:] XML 파일로 AOP 환경 설정하기비전공자 공부일기/:: WEB & Front-End 2019. 9. 5. 12:53
2019. 09. 05
상속은 is A, 포함은 has A의 관계이다.
횡단관심모듈이 선언된 클래스(Advice)로 Spring Bean 등록\
XML 파일로 AOP 환경 설정하기
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 핵심관심모듈로 사용하기 위한 메소드가 선언된 클래스를 Spring Bean으로 등록 --> <bean id="studentDAO" class="site.itwill07.aop.StudentDAOImpl"/> <bean id="studentService" class="site.itwill07.aop.StudentServiceImpl"> <property name="studentDAO" ref="studentDAO"/> </bean> <!-- 횡단관심모듈이 선언된 클래스(Advice)로 Spring Bean 등록 --> <bean id="loggingBeforeAdvice" class="site.itwill07.aop.LoggingBeforeAdvice"/> <!-- config : Spring AOP(AspectJ) 설정을 위한 상위 엘리먼트 --> <aop:config> <!-- pointcut : Pointcut 설정을 위한 엘리먼트 --> <!-- => Pointcut : 횡단관심코드가 삽입되기 위한 핵심관심모듈을 등록하는 기능 --> <!-- => Spring Bean으로 등록된 클래스의 메소드를 핵심관심모듈로 등록 --> <!-- => aspect 엘리먼트에서 Pointcut 재사용을 위해 설정 - 생략 가능 --> <!-- id 속성 : pointcut 엘리먼트의 고유값을 속성값으로 설정 --> <!-- expression 속성 : execution 또는 within 중 하나를 속성값으로 설정 --> <!-- execution 속성값 : Spring Bean으로 등록된 클래스의 메소드를 Pointcut 표현식을 이용하여 핵심관심모듈로 등록 --> <!-- 형식) execution([접근지정자] 반환형 [패키지명.클래스명.]메소드명(자료형,자료형,...)) --> <!-- Pointcut 표현식에서는 와일드카드와 연산자를 이용하여 설정 가능 --> <!-- => 와일드카드 : ..(0개 이상), *(1개 이상), +(0개 또는 1개) --> <!-- => 연산자 : !(NOT), &&(AND), ||(OR) --> <aop:pointcut expression="execution(* *(..))" id="loggingBeforePointcut"/> <!-- within : Spring Bean으로 등록된 클래스에 존재하는 모든 메소드를 핵심관심모듈로 등록 --> <!-- 형식) within([패키지명.]클래스명) --> <!-- => 클래스 대신 인터페이스를 선언하여 자식클래스의 메소드를 핵심관심모듈로 등록 가능 --> <!-- aspect : 핵심관심모듈(Pointcut)에 횡단관심모듈(Advice)을 원하는 위치(JoinPoint)에 삽입되도록 설정하는 엘리먼트 --> <!-- => ApsectJ Weaver를 이용하여 Apsect(Proxy) 클래스를 생성해 실행되도록 지원 --> <!-- ref 속성 : Advice 클래스로 등록된 Spring Bean의 beanName를 속성값으로 설정 --> <aop:aspect ref="loggingBeforeAdvice"> <!-- before : 핵심관심모듈의 코드 전에 횡단관심모듈의 코드가 삽입되도록 설정하는 엘리먼트 - JoinPoint --> <!-- method 속성 : 횡단관심모듈의 메소드명을 속성값으로 설정 --> <!-- pointcut-ref 속성 : pointcut 엘리먼트의 고유값을 속성값으로 설정 --> <!-- => 핵심관심모듈의 메소드가 호출될 경우 횡단관심모듈이 삽입된 메소드 실행 --> <aop:before method="beforeLog" pointcut-ref="loggingBeforePointcut"/> </aop:aspect> </aop:config> </beans>
aop:pointcut 태그의 속성 중
expression="execution()" 괄호 안에는
execution([접근지정자] 반환형 [패키지명.클래스명.]메소드명(자료형,자료형,...)) 형식으로 작성해준다.
[접근지정자]와 [패키지명.클래스명.]은 생략해도 되지만 작성해야할 경우 정확히 입력해준다.
하지만 반환형, 메소드형, (자료형)은 생략할 수 없는 대신, 와일드카드로 간략히 나타낼 수 있다.
다양한 예시>>
execution(* *(..)) 일 경우 : 모든 메소드가 대상
execution(* *(int))일 경우 : 매개변수가 int만 되는 핵심모듈
execution(* select*(..))일 경우 : select로 시작하는 모든 메소드
execution(* select*(..)) || execution(* insert*(..)) 일 경우 :
참고로 !execution()은 괄호 안의 지정된 메소드 빼고 모두 라는 뜻
;
'비전공자 공부일기 > :: WEB & Front-End' 카테고리의 다른 글
[HTML/CSS] 여러가지 자주쓰는 유용한 HTML 태그들 (2) (0) 2020.06.11 [HTML/CSS] 여러가지 자주쓰는 유용한 HTML 태그들 (1) (0) 2020.06.11 [WEB:] AOP와 OOP의 차이 (0) 2019.09.04 [WEB:Spring] Bean 03 - Annotation으로 Spring Bean 만들기 (0) 2019.09.03 [WEB:Spring] Bean 02 - Spring Bean의 생성주기 (0) 2019.09.03