<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>버전</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>버전</version>
</dependency>
<bean id="공통기능 id" class=“공통기능 클래스"/>
<aop:config>
<aop:pointcut id="핵심기능 id" expression=“핵심기능 메서드 표현식 " />
<aop:aspect ref=" 공통기능 id ">
<aop:advice종류 pointcut-ref="핵심기능 id " method="log"/>
</aop:aspect>
</aop:config>
<aop:before> : 핵심기능 메서드 실행 전에 advice실행
<aop:after-returning> : 정상적으로 핵심기능 메서드 실행
<aop:after-throwing> : 핵심기능 메서드 실행 중 exception 발생 시 advice실행
<aop:after> : 핵심기능 메서드 실행 중 exception이 발생하여도 실행 후에 advice실행
<aop:around> : 핵심기능 메서드 실행 전/후 advice 실행
<bean id="공통기능 id" class=“공통기능 클래스"/>
<aop:config>
<aop:pointcut id="핵심기능 id" expression=“핵심기능 메서드 표현식 " />
<aop:aspect ref=" 공통기능 id ">
<aop:advice종류 pointcut-ref="핵심기능 id " method="log"/>
</aop:aspect>
</aop:config>
execution(수식어 리턴타입 패키지경로.클래스명.메소드이름(파라미터))
▶ 수식어패턴 : public, private 등등의 수식어를 명시, 생략 가능
▶ 리턴타입 : 리턴 타입을 명시
▶ 클래스이름, 이름패턴 : 클래스 이름 및 메서드이름을 패턴으로 명시
▶ 파라미터패턴 : 매칭될 파라미터에 대해 명시
▶ '*' : 모든 값을 표현
▶ '..' : 0개 이상을 의미
예)
1. execution(public void set(..))
=> 리턴 타입이 void이고 메소드 이름이 set으로 시작하며, 파라미터가 0개 이상인 메소드
2. execution( sp.aop.service..())
=> sp.aop.service 패키지의 파라미터가 없는 모든 메소드
3. execution( sp.aop.service...(..))
=> sp.aop.service 패키지 및 하위 패키지에 있는 파라미터가 0개 이상인 모든 메소드
4. execution( get())
=> 메서드 이름이 get으로 시작하고 1개의 파라미터를 갖는 메소드
5. execution(Integer read*(Integer, ..))
=> 리턴 값이 Integer이고 메소드 이름이 read로 시작하며 첫번째 파라미터 타입이 Integer이고, 1개 이상의 파라미터를 갖는 메소드