AOP 구현 방식 중 @Aspect 어노테이션을 기반으로 한 예제이다.
1. LogAop.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package com.java.ex3; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; @Aspect public class LogAop { @Pointcut("bean(*ker)") //~ker로 끝나는 빈에만 적용
private void pointcutMethod() { } @Around("pointcutMethod()") public Object loggerAop(ProceedingJoinPoint joinpoint) throws Throwable { String signatureStr = joinpoint.getSignature().toShortString(); System.out.println(signatureStr + "is start."); long st = System.currentTimeMillis(); try { Object obj = joinpoint.proceed(); return obj; } finally { long et = System.currentTimeMillis(); System.out.println(signatureStr + " is finished."); System.out.println(signatureStr + " 경과시간 : " + (et - st)); } } @Before("within(com.java.ex3.*)") public void beforeAdvice() { System.out.println("beforeAdvice()"); } } | cs |
2. MainClass.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package com.java.ex3; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; public class MainClass { public static void main(String[] args) { AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX3.xml"); Student student = ctx.getBean("student", Student.class); student.getStudentInfo(); Worker worker = ctx.getBean("worker", Worker.class); worker.getWorkerInfo(); ctx.close(); } } | cs |
3. Student.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | package com.java.ex3; public class Student { private String name; private int age; private int gradeNum; private int classNum; public void getStudentInfo() { System.out.println("이름 : " + getName()); System.out.println("나이 : " + getAge()); System.out.println("학년 : " + getGradeNum()); System.out.println("반 : " + getClassNum()); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getGradeNum() { return gradeNum; } public void setGradeNum(int gradeNum) { this.gradeNum = gradeNum; } public int getClassNum() { return classNum; } public void setClassNum(int classNum) { this.classNum = classNum; } } | cs |
4. Worker.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | package com.java.ex3; public class Worker { private String name; private int age; private String job; public void getWorkerInfo() { System.out.println("이름 : " + getName()); System.out.println("나이 : " + getAge()); System.out.println("직업 : " + getJob()); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } } | cs |
5. applicationCTX3.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?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-3.2.xsd"> <aop:aspectj-autoproxy /> <bean id="logAop" class="com.java.ex3.LogAop" /> <bean id="student" class="com.java.ex3.Student"> <property name="name" value="홍길동" /> <property name="age" value="10" /> <property name="gradeNum" value="3" /> <property name="classNum" value="5" /> </bean> <bean id="worker" class="com.java.ex3.Worker"> <property name="name" value="홍길순" /> <property name="age" value="35" /> <property name="job" value="개발자" /> </bean> </beans> | cs |
*실행결과
=> 앞에 작성했던 XML 스키마 기반과 달리 @Aspect 어노테이션을 사용하여 AOP를 구현 하였다.
또 pointcut을 지정하기 위해 표현식으로 Aspectj 문법을 사용하였다.
@Pointcut("bean(*ker)") //~ker로 끝나는 빈에만 적용
private void pointcutMethod() {
}
ker로 끝나는 빈에만 적용을 지정하였기 떄문에 실행결과에서 Student 는 공통 기능(LogAop)이
적용되지 않았고 Worker 에만 적용이 된 모습을 확인할 수 있다.
'Spring' 카테고리의 다른 글
SpringMVC 게시판 (0) | 2016.05.18 |
---|---|
SpringMVC(get, post 방식으로 값 넘기기) (0) | 2016.05.17 |
SpringMVC (0) | 2016.05.17 |
AOP 구현(XML 스키마 기반 Advice 종류 예제) (0) | 2016.05.13 |
AOP 구현(XML 스키마 기반) (0) | 2016.05.13 |