개발속이야기/Java

Spring aspectj 예제

스토리지기 2018. 1. 8. 15:26

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