spring - 基于 @AspectJ 的 Spring 3.1 AOP

标签 spring spring-aop

我正在尝试使用 Spring 3.1 运行基于 @AspectJ 的 AOP,但无法正确配置切入点 切入点和建议方法是:

切入点:

@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() 方法中给出切入点表达式时,删除 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.");
}

我正在尝试将切入点应用于 Student 类的方法:

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();
}
 }

Spring 配置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

带有 spring 3.1 jar 的

最佳答案

解决了问题:创建 bean 时的问题是由于旧 jar

更换 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

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

关于spring - 基于 @AspectJ 的 Spring 3.1 AOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895963/

相关文章:

Spring Boot 应用程序特定的外部属性

java - 有条件地忽略 Jackson 的原始类型字段

java - 如何使用参数化注释指定方法及其使用 @Pointcut 的值

java - 具有 0 个或多个任意类型参数的 Spring AOP 切入点表达式方法会抛出 java.lang.NullPointerException

spring - 如何在 Spring Boot 2 应用程序中配置多个子上下文?

java - 如何避免重复请求的竞争条件?

java - Spring Security 不接受正确的凭据

java - Spring 每个方法都应该使用 AOP 代理 bean 调用

aop - aop中什么是散射和缠结

java - 为什么 protected 方法不被Spring AOP拦截