pom.xml 설정을 해야 한다. 하지 않은면
import org.aspectj.lang.ProceedingJoinPoint; 이부분이 설정되지 않는다.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.samples</groupId>
<artifactId>springDemo3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<!-- Generic properties -->
<java.version>1.6</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Spring -->
<spring-framework.version>3.2.3.RELEASE</spring-framework.version>
<!-- Hibernate / JPA -->
<hibernate.version>4.2.1.Final</hibernate.version>
<!-- Logging -->
<logback.version>1.0.13</logback.version>
<slf4j.version>1.7.5</slf4j.version>
<!-- Test -->
<junit.version>4.11</junit.version>
</properties>
<dependencies>
<!-- Spring and Transactions -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- Logging with SLF4J & LogBack -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<scope>runtime</scope>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- Test Artifacts -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-framework.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- AOP -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
</dependencies>
</project>
Student.java
package com.test.aop;
public class Student {
private String name;
private int age;
private String hakbun;
private String grade;
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 getHakbun() {
return hakbun;
}
public void setHakbun(String hakbun) {
this.hakbun = hakbun;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public void getInfo(){
System.out.println("이름: "+getName());
System.out.println("나이: "+getAge());
System.out.println("학번: "+getHakbun());
System.out.println("학년: "+getGrade());
}
}
Staff.java
package com.test.aop;
public class Staff {
private String name;
private int age;
private String dept;
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 getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public void getInfo(){
System.out.println("이름: "+getName());
System.out.println("나이: "+getAge());
System.out.println("부서: "+getDept());
}
}
AdviceLog.java
package com.test.aop;
// pom.xml 파일 설정해야 import 할 수 있다.
import org.aspectj.lang.ProceedingJoinPoint;
public class AdviceLog {
public Object profile(ProceedingJoinPoint joinPoint) throws Throwable{
String signStr = joinPoint.getSignature().toShortString();
System.out.println(signStr+" is start!!");
long startTime = System.currentTimeMillis();
System.out.println("startTime: "+startTime);
try{
Object obj = joinPoint.proceed();
return obj;
} finally {
long endTime = System.currentTimeMillis();
System.out.println(signStr+" is finished!!");
System.out.println(signStr+" 경과시간: "+(endTime-startTime));
}
}
}
MainAop.java
package com.test.aop;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainAop {
public static void main(String[] args){
AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:aopEx1.xml");
Student student = ctx.getBean("student",Student.class);
student.getInfo();
Staff staff = ctx.getBean("staff",Staff.class);
staff.getInfo();
ctx.close();
}
}
aopEx1.xml
설정시 옆 탭 [Namespaces] 를 클릭해서 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-3.2.xsd">
<bean id="adviceLog" class="com.test.aop.AdviceLog" />
<aop:config>
<aop:aspect id="prof" ref="adviceLog">
<aop:pointcut expression="within(com.test.aop.*)" id="pcMethod"/>
<aop:around pointcut-ref="pcMethod" method="profile"/>
</aop:aspect>
</aop:config>
<bean id="student" class="com.test.aop.Student">
<property name="name" value="강호동" />
<property name="age" value="48" />
<property name="hakbun" value="20101201" />
<property name="grade" value="3학년"/>
</bean>
<bean id="staff" class="com.test.aop.Staff">
<property name="name" value="한효주"/>
<property name="age" value="32"/>
<property name="dept" value="관리과"/>
</bean>
</beans>
'기존카테고리 > Spring_basic1' 카테고리의 다른 글
IoC(Inversion of Control- 제어의 역전) (0) | 2017.07.22 |
---|---|
빈의 범위(Scope) (0) | 2017.07.10 |
빈의 Life Cycle (0) | 2017.07.10 |
JAVA 속에 XML 코드 삽입 (0) | 2017.07.10 |
XML 속에 JAVA 코드 삽입 (0) | 2017.07.10 |