PointCut
JoinPoint
Advice
Aspect = JoinPoint + Advice
beans.xml
<?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"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- 함수 구현시 사용 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<bean id="hyungkuim" class="kr.oraclejava.spring.sample.Person">
<property name="name" value="임형구"></property>
<property name="age" value="5"></property>
</bean>
<bean id="aop1" class="kr.oraclejava.spring.sample.PersonAspect"></bean>
<aop:config>
<aop:aspect id="aspect1" ref="aop1">
<aop:pointcut expression="execution(* kr.oraclejava.spring.sample.IPerson.getName())" id="p1"/>
<aop:before method="addDataBefore" pointcut-ref="p1"/>
</aop:aspect>
<!--
<aop:aspect id="aspect2" ref="aop1">
<aop:pointcut expression="execution(* kr.oraclejava.spring.sample.IPerson.getAge())" id="p2"/>
<aop:before method="addDataBefore2" pointcut-ref="p2"/>
</aop:aspect>
-->
</aop:config>
</beans>
IPerson.java
package kr.oraclejava.spring.sample;
public interface IPerson {
public void setName(String name);
public String getName();
public void setAge(int age);
public int getAge();
}
Person.java
package kr.oraclejava.spring.sample;
public class Person implements IPerson {
private String name;
private int age;
public void setName(String name) {
// TODO Auto-generated method stub
this.name = name;
}
public String getName() {
// TODO Auto-generated method stub
return this.name;
}
public void setAge(int age) {
// TODO Auto-generated method stub
this.age = age;
}
public int getAge() {
// TODO Auto-generated method stub
return this.age;
}
}
PersonAspect.java
package kr.oraclejava.spring.sample;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
//Aspect Oriented Programming
// 시점 + 처리
@Aspect
public class PersonAspect {
// 사전처리 xml에서
public void addDataBefore() {
System.out.println("사전처리입니다.");
}
// 함수에서
@Before("execution(* getAge())")
public void addDataBefore2() {
System.out.println("사전2222처리입니다.");
}
@AfterReturning(pointcut="execution(* getName())", returning="retVal")
public void addDataAfter(Object retVal) {
String name = retVal.toString();
System.out.println("retVal:" + name);
}
}
PersonTest.java
package kr.oraclejava.spring.sample;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class PersonTest {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
IPerson person = (IPerson)ac.getBean("hyungkuim");
System.out.println("이름:" + person.getName() );
System.out.println("나이:" + person.getAge() );
}
}
사전처리입니다.
retVal:임형구
이름:임형구
사전2222처리입니다.
나이:5
'개발속이야기 > Java' 카테고리의 다른 글
logo4j2 설정 예제 (0) | 2018.01.09 |
---|---|
Spring MVC 예제 (0) | 2018.01.08 |
Spring 과제 (0) | 2018.01.08 |
JSP file upload download 예제 (0) | 2018.01.08 |
JSP ajax 테스트 예제 (0) | 2018.01.08 |