복붙노트

[SPRING] @AspectJ Spring 3.1을 기반으로 한 AOP

SPRING

@AspectJ Spring 3.1을 기반으로 한 AOP

Spring 3.1과 @AspectJ 기반 AOP를 실행하려고하는데 & pointcut을 제대로 구성 할 수 없다. Pointcut 및 advice 메소드는 다음과 같습니다.

Pointcuts :

@Pointcut("execution(* point.*.*(..))")
public void selectAll() {}

조언 후 :

@After("selectAll()")
public void afterAdvice() {
    System.out.println("profile has been setup.");
}

조언하기 전에 :

@Before("selectAll()")
public void beforeAdvice() {
    System.out.println("Going to setup profile.");
}

메인 프로그램을 실행하고 예외가 발생했습니다 :

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'student' defined in class path resource [spring.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut selectAll
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)

비록 내가 beforeAdvice ()와 afterAdvice () 메소드에서 pointcut 표현식을 주면, PointCuts 메소드를 모든 것이 잘 동작한다.

@Before("execution(* point.*.*(..))")
public void beforeAdvice() {
    System.out.println("Going to setup profile.");
}

 @After("execution(* point.*.*(..))")
public void afterAdvice() {
    System.out.println("profile has been setup.");
}

나는 학생 클래스의 메소드에 pointcut을 적용하려고한다.

package point;

 public class Student{
private Integer age;
private String name;

public void setAge(Integer age) {
    this.age = age;
}

public Integer getAge() {
    System.out.println("Age : " + age);
    return age;
}

public void setName(String name) {
    this.name = name;
}

public String getName() {
    System.out.println("Name : " + name);
    return name;
}

public void printThrowException() {
    System.out.println("Exception raised");
    throw new IllegalArgumentException();
}
 }

스프링 구성 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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">

<aop:aspectj-autoproxy />
 <bean id="student" class="point.Student">
    <property name="name" value="Zara" />
    <property name="age" value="11" /> 
</bean>
<bean id="logging" class="point.Logging" />
</beans>

사용 된 Jar 파일 :

aopalliance-1.0.jar
asm-3.3.1.jar
aspectj-1.7.1.jar
aspectjrt-1.6.8.jar
aspectjtools-1.5.4.jar
aspectjweaver-1.6.2.jar
cglib-2.2.2.jar

봄 3.1 병이있는

해결법

  1. ==============================

    1.문제를 해결했습니다 : 빈을 만드는 동안 문제는 오래된 항아리 때문이었습니다.

    문제를 해결했습니다 : 빈을 만드는 동안 문제는 오래된 항아리 때문이었습니다.

    대체 된 항아리 :

     aopalliance-1.0.jar
     asm-3.3.1.jar
     aspectj-1.7.1.jar
     aspectjrt-1.6.8.jar
     aspectjtools-1.5.4.jar
     aspectjweaver-1.6.2.jar
     cglib-2.2.2.jar
    

    aopalliance-1.0.jar
    asm-3.3.1.jar
    aspectj-1.7.1.jar
    aspectjrt-1.7.0.jar
    aspectjweaver-1.7.0.jar
    cglib-2.2.2.jar
    
  2. from https://stackoverflow.com/questions/13895963/aspectj-based-aop-with-spring-3-1 by cc-by-sa and MIT license