`

aspectJ error at ::0 formal unbound in pointcut

阅读更多

 

 

异常详情

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'StudentsImpl' defined in class path resource [beans.xml]: Initialization of bean failed; nested exception isjava.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut

   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:291)

   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)

   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)

   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)

   at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)

   at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)

   at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)

   at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)

   at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)

   at TestStudentsDAOProxy.main(TestStudentsDAOProxy.java:11)

Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut

   at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:302)

   at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:195)

   at org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:181)

   at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:162)

   at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:200)

   at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:254)

   at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:286)

   at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:117)

   at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:87)

   at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:68)

   at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:359)

   at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322)

   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:407)

   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1426)

   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)

   ... 11 more

 

错误代码

package com.eden.proxy;

 

import java.lang.reflect.Method;

 

import org.aspectj.lang.annotation.AfterReturning;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.springframework.stereotype.Component;

 

/**

 * 使用AspectJ的切面类

 * @author Administrator

 */

@Aspect    //声明为一个 AspectJ切面

@Component//声明为组件,这样系统启动会进行该类的初始化

publicclass StudentsDaoAspectJ {

  

  

   @AfterReturning("execution(public void com.eden.dao.impl.StudentsImpl.*())")

   publicvoid afterReturning(Object arg0, Method arg1, Object[] arg2,

        Object arg3)throws Throwable {

      System.out.println("方法执行后。。。");

   }

   @Before("execution(public void com.eden.dao.impl.StudentsImpl.*())")

   publicvoid before(Method arg0, Object[] arg1, Object arg2)

        throws Throwable {

      System.out.println("方法执行前。。。");

   }

}

 

错误原因

      定义了通知方法,方法需要参数,但是注解设置没有指定调用方法参数,需要把通知方法中的参数删掉,变成空参数方法(如何设置带有参数的通知方法,还不清楚^_^

正确代码

package com.eden.proxy;

 

import java.lang.reflect.Method;

 

import org.aspectj.lang.annotation.AfterReturning;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.springframework.stereotype.Component;

 

/**

 * 使用AspectJ的切面类

 * @author Administrator

 */

@Aspect    //声明为一个 AspectJ切面

@Component//声明为组件,这样系统启动会进行该类的初始化

publicclass StudentsDaoAspectJ {

  

  

   @AfterReturning("execution(public void com.eden.dao.impl.StudentsImpl.*())")

   publicvoid afterReturning() throws Throwable {

      System.out.println("方法执行后。。。");

   }

   @Before("execution(public void com.eden.dao.impl.StudentsImpl.*())")

   publicvoid before()

        throws Throwable {

      System.out.println("方法执行前。。。");

   }

}

 

正确输出

log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).

log4j:WARN Please initialize the log4j system properly.

方法执行前。。。

保存成功

方法执行后。。。

 

 

分享到:
评论

相关推荐

    AspectJ in Action: Enterprise AOP with Spring Applications

    ### AspectJ in Action: Enterprise AOP with Spring Applications #### 关键知识点概述 1. **Spring-AspectJ集成:**本书重点介绍了Spring框架与AspectJ相结合的技术优势及其在企业级应用中的强大功能。 2. **...

    Aspectj in Action: Enterprise AOP with Spring Applications (2nd Edition)

    ### 关于《AspectJ in Action: Enterprise AOP with Spring Applications(第2版)》的关键知识点解析 #### 一、AspectJ简介与AOP概念 **AspectJ**是面向切面编程(Aspect-Oriented Programming, AOP)的一种成熟...

    com.springsource.org.aspectj.weaver-1.6.8.jar

    com.springsource.org.aspectj.weaver-1.6.8.jar

    aspectjweaver-1.9.7-API文档-中英对照版.zip

    Maven坐标:org.aspectj:aspectjweaver:1.9.7; 标签:aspectj、aspectjweaver、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,...

    aspectjweaver-1.9.7-API文档-中文版.zip

    Maven坐标:org.aspectj:aspectjweaver:1.9.7; 标签:aspectj、aspectjweaver、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中...

    aspectjweaver-1.8.9&aspectjrt1;.8.9&aopalliance;-1.0的jar包

    SpringAOP 报错error at ::0 can't find referenced pointcut deleteCell,或类似这样的错误,可能是因为springAOP相关依赖包版本低的缘故,本下载包,可以解决这个问题。

    aspectjweaver-1.9.6.jar报错error in opening zip file,下载后替换

    java: 读取D:\Develop\maven\repository\org\aspectj\aspectjweaver\1.9.6\aspectjweaver-1.9.6.jar时出错; error in opening zip file 提示jar出问题,找到此处,删除重新下载,但是jar依旧是损坏状态

    aspectj-1.8.10.jar

    aspectj-1.8.10.jar org.aspectj.lang.annotation.* org.aspectj.lang.annotation.Pointcut

    aspectjweaver-1.6.9.jar

    在AspectJ中,我们通过定义pointcut(切入点)来指定代码执行的特定位置,然后通过advice(通知)定义在这些切入点上执行的行为。通知可以是前置通知(before)、后置通知(after)、环绕通知(around)等。 当我们...

    spring-aspectj-sample:在 Spring 框架 4 中使用 AspectJ 的示例

    【标题】"spring-aspectj-sample:在 Spring 框架 4 中使用 AspectJ 的示例"揭示了本项目的核心内容,即演示如何在Spring框架的第4个主要版本中整合并应用AspectJ,一个强大的面向切面编程(AOP)工具。面向切面编程...

    com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

    spring 前置通知的相关jar包, 包括 com.springsource.org.aopalliance-1.0.0.jar 和 com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

    AspectJ_sample:AspectJ示例

    要学习和使用AspectJ,需要了解基本的切面概念,如切入点(Pointcut)、通知(Advice)、连接点(Join Point)等。同时,熟悉AspectJ的语法,包括注解和XML配置文件,以及如何在Maven或Gradle等构建工具中集成...

    gradle-aspectj-poc:测试 Gradle 与 AspectJ 编译时编织的集成

    **Gradle AspectJ 编译时编织集成** 在软件开发中,AspectJ 是一个强大的面向切面编程(AOP)框架,它允许开发者定义“方面”来封装关注点,如日志、事务管理等,这些关注点通常横切多个业务逻辑模块。Gradle 是一...

    java-aop-aspectj-demo:演示AspectJ在编织罐中的用法

    4. **连接点(Join Point)和切点(Pointcut)**:连接点是在程序执行过程中可以插入切面的特定点,如方法调用、构造器调用等。切点是匹配一组连接点的表达式,它定义了通知应用的位置。 5. **织入(Weaving)**:...

    aspectj-learning:https

    4. **切入点(Pointcut)**:定义一组连接点的规则,可以是方法名、注解、包名等,用于定位通知将在何处执行。 5. **引入(Introduction)**:允许在现有类上添加新的接口或方法,而无需修改原有代码。 6. **织入...

    aspectjweaver-1.8.7

    spring中使用aop技术需要用到的aspectj包,另外还有一个aopalliance-1.0.jar我也上传了

    spring aop配置常用jar包

    它可以在编译时或运行时进行织入,使你可以使用AspectJ的语法编写切面并将其应用到Spring应用上下文中。 2. **asm-3.3.jar, asm-commons-3.3.jar, asm-tree-3.3.jar**:ASM是一个Java字节码操控和分析框架,用于...

    spring-aop-aspectj-ctw:用AspectJ编译Spring AOP

    Spring AOP的一个常见问题是获取Pointcut到达类的内部方法调用。 在这个示例中,您可以在一个简单的Spring Boot示例中看到如何使用AspectJ处理节拍时间编织。 示例场景 在此示例中,将发生以下情况: 我们在上调用...

    aspectj-ebook:AspectJ 电子书(土耳其语)

    AspectJ 电子书它将帮助您学习以兴趣为导向的 AspectJ 语言,该语言将 AOP 原则注入到 Java 编程语言以及随之而来的新结构中。 您可以在此处找到 PDF、ePub 和 Kindle 格式的本书内容: 。 第 1 部分:原则和方面J ...

    AspectJ-Dropbox:只是一个小沙箱

    在AspectJ-Dropbox项目中,开发者可能使用AspectJ的切点(pointcut)和通知(advice)来定义何时以及如何对Dropbox客户端的文件操作进行拦截。切点是程序执行过程中的特定位置,而通知则是当切点匹配时执行的代码块。...

Global site tag (gtag.js) - Google Analytics