注:内有单词(sping)写错,请忽略,不影响程序运行

运行时报错:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mhl' defined in class path resource [myjava/wicherspingaop-aop.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.aspectj.AspectJPointcutAdvisor#2': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.aop.aspectj.AspectJPointcutAdvisor]: 
Constructor threw exception; nested exception is java.lang.IllegalArgumentException: warning no match for this type name: res [Xlint:invalidAbsoluteTypeName]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:479)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at myjava.Main.main(Main.java:9)

代码如下:

Main.java

package myjava;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main {
public static void main(String[] args){
//获取IOC容器
ApplicationContext context = new ClassPathXmlApplicationContext("myjava/wicherspingaop-aop.xml");
Itest_1 mhl = context.getBean("mhl", Itest_1.class) ;
// mhl.sayHello();
mhl.saveToDB("zzzzz") ;
}
}

Itest_1.java

package myjava;

public interface Itest_1 {
void sayHello() ;
String saveToDB(String mData) ;
}

test_1.java

package myjava;

public class test_1 implements Itest_1 {
private String name ; public test_1(){
} public test_1(String name){
this.name = name ;
} public void setName(String name){
this.name = name ;
} public void sayHello(){
System.out.println("sayHello " + name);
} public String saveToDB(String mData){
System.out.println("SaveToDB: " + mData);
return "tt" ;
}
}

mylog.java

package myjava;

import org.aspectj.lang.ProceedingJoinPoint;

public class mylog {
// 1 - error; 2 - warn ; 3 - debug; 4 - info ;
private int loglvl = 3 ; public void info(String mlog){
if (loglvl == 4){
System.out.println("Info:" + mlog);
}
} public void debug(String mlog){
if (loglvl >= 3) {
System.out.println("debug:" + mlog);
}
} public void warn(String mlog){
if (loglvl >= 2) {
System.out.println("warn:" + mlog);
}
} public void error(String mlog){
if (loglvl >= 1) {
System.out.println("error:" + mlog);
}
} //前置通知
public void beforeAdvice(String messages){
System.out.println("前置通知, param:" + messages);
} //后置返回通知
public void afterReturn(String res){
System.out.println("后置返回通知,返回值:" + res);
//System.out.println("==============================");
} //后置异常通知
public void afterThrowing(Exception exception){
System.out.println("后置异常通知:" + exception);
} //后置最终通知
public void afterFinally(String messages){
System.out.println("后置最终通知:" + messages);
} //环绕通知
public String aroundAdvice(ProceedingJoinPoint joinPoint, String messages) throws Throwable{
try {
System.out.println("环绕通知,接入点:" + joinPoint + ",原param:" + messages);
System.out.println("放行目标方法并改变参数,将执行结果返回");
String res = (String) joinPoint.proceed(new Object[] {"param has been replaced "});
System.out.println("环绕通知改变了返回结果");
res = res.concat("& res has been changed");
System.out.println("返回结果为:"+res);
return res;
}catch (Exception e){
e.printStackTrace();
}
return null;
} }

wicherspingaop-aop.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.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"
> <bean id = "mhl" class="myjava.test_1">
<property name="name" value="Wicher"></property>
</bean> <bean id = "log" class="myjava.mylog"></bean> <!--顶层的AOP配置元素,大多数的<aop:*>包含在<aop:config>元素内-->
<aop:config>
<!--定义外部切入点,该切入点可以被多个切面使用-->
<aop:pointcut id="pointcut_log" expression="execution(* myjava.test_1.* (..)) and args(messages)"/>
<!--定义切面-->
<aop:aspect ref="log">
<!--定义内部切入点,该切入点只能被当前切面使用-->
<!--<aop:pointcut id="pointcut_log_inner" expression="execution(* myjava.test_1.* (..)) and args(messages)"/>--> <!--前置通知-->
<aop:before method="beforeAdvice" arg-names="messages" pointcut-ref="pointcut_log"/>
<!--后置通知 不管该方法是否执行成功-->
<aop:after method="afterFinally" arg-names="messages" pointcut="execution(* myjava.test_1.* (..)) and args(messages)"/>
<!--后置返回通知 在方法成功执行后调用通知-->
<!--<aop:after-returning method="afterReturn" arg-names="res" returning="res" pointcut="execution(* myjava.test_1.* (..))"/>-->
<aop:after-returning method="afterReturn" arg-names="res" returning="res" pointcut="execution(* myjava.test_1.* (..)) and args(res)"/>
<!--后置异常通知 在方法抛出异常后调用通知-->
<aop:after-throwing method="afterThrowing" arg-names="exception" pointcut="execution(* myjava.test_1.* (..)) and args(exception)"/>
<!--环绕通知-->
<aop:around method="aroundAdvice" arg-names="joinPoint,messages" pointcut="execution(* myjava.test_1.* (..)) and args(messages)"/>
</aop:aspect>
</aop:config>
</beans>

工程路径

从网上down的demo能正常运行,自己先排错,把xml中环绕通知隐藏,运行正常,依次把前置通知(before),后置通知(after)取消隐藏,运行正常,再将after-returning取消隐藏时错,仔细与demo对比,发现在aop:after-returning的属性pointcut中是没有and args(res)的,去掉后运行正常, 因为对aop配置文件还不太熟,原因还不知道,后续确定原因后再记录。

全部lib文件如下(com.springsource.org.aspectj.weaver-1.6.4.RELEASE.jar是手工下载的,其他都是在建立spring时勾选的download自动下载):

后置通知

nested exception is java.lang.IllegalArgumentException: warning no match for this type name: res [Xlint:invalidAbsoluteTypeName]的更多相关文章

  1. Spring AOP 开发中遇到问题:Caused by: java.lang.IllegalArgumentException: warning no match for this type name: com.xxx.collector.service.impl.XxxServiceImpl [Xlint:invalidAbsoluteTypeName]

    在网上找了很多,都不是我想要的,后来发现是我在springaop注解的时候 写错了类名导致的这个问题 @Pointcut("execution(* com.xxx.collector.ser ...

  2. nested exception is java.lang.IllegalArgumentException: Pointcut is not well-formed

    在用AOP 的时候出现了如下的错误, 警告: Exception encountered during context initialization - cancelling refresh atte ...

  3. 异常:Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException

    这个异常是出现在注入配置文件中配置好的属性时报错的: Injection of autowired dependencies failed; nested exception is java.lang ...

  4. IDEA报错: Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.datasource.url' in value "${spring.datasource.url}"

    运行审核流模块: 在ActivitiServiceApplication模块日志报错: Error starting ApplicationContext. To display the auto-c ...

  5. org.hibernate.QueryException: JPA-style positional param was not an integral ordinal; nested exception is java.lang.IllegalArgumentException: org.hibernate.QueryException: JPA-style positional param w

    org.hibernate.QueryException: JPA-style positional param was not an integral ordinal; nested excepti ...

  6. Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'name pattern' at character position 36

    例: <aop:config> <aop:pointcut expression="execution(* com.zsn.Service.Impl.*.*(..))&qu ...

  7. MyBatis与Spring MVC结合时,使用DAO注入出现:Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

    错误源自使用了这个例子:http://www.yihaomen.com/article/java/336.htm,如果运行时会出现如下错误: Invocation of init method fai ...

  8. HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: Control character in cookie value or attribute.

    HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: ...

  9. org.springframework.dao.InvalidDataAccessApiUsageException: The given id must not be null!; nested exception is java.lang.IllegalArgumentException: The given id must not be null

    通过这个简单的案例,手把手教给你分析异常信息(适合初学者看) org.springframework.dao.InvalidDataAccessApiUsageException: The given ...

随机推荐

  1. 编写第一个JavaScript程序

    编写第一个程序 在 HTML 页面中嵌入 JavaScript 脚本需要使用 <script> 标签,用户可以在 <script> 标签中直接编写 JavaScript 代码, ...

  2. NO21 Llinux的文件种类与扩展名--文件权限--软硬链接--Linux删除文件原理

    Linux的文件种类与扩展名 一.文件种类:1.普通文件(regular file)第一个字符为[ - ]包括:①纯文本档(ASCII):这是Linux系统中最多的一种文件类型,称为纯文本档.是因为内 ...

  3. express - 快速构建项目

    1,cnpm i express -g 2,  cnpm i express-generater -g 3, express - e  项目名

  4. 开源DDD设计模式框架YMNNetCoreFrameWork第一篇

    DDD设计模式:仓储.领域模型.应用层.聚合根.事件总线,以业务模型驱动设计,从数据模型驱动脱离,不用关心数据库设计,开发效率更高 DDD领域驱动设计模型概念不再讲解,直接上技术 框架搭建: 如图所示 ...

  5. 我用Python帮朋友做了张猪肉数据分析图,结果。。。

    却发现他是这么拿我当兄弟的 事情的经过是这样的: 我开开心心的去一家烧饼店吃饭 .   ​ 抬头一看,二师兄又涨价了 叹了口气,再这么下去真的要吃不起夹肉的烧饼了 点了两个烧饼一碗馄饨 快吃完的时候, ...

  6. 原生JS 实现 dom ready

    记录一下项目技术问题: 记得:放在head标签内的脚本,第一时间执行 var baseTools = { // dom ready ready: function( f ){ var ie = !!( ...

  7. hadoop安装文档

    一.准备 该准备工作在三台机器上都需要进行,首先使用 vmvare 创建 1 个虚拟机,这台虚拟机是 master,一会需要把 master 克隆出两台 slave 点确定然后开启此虚拟机 然后添加/ ...

  8. 十六、React 渲染数据注意事项、以及react-router4.x中使用js跳转路由(登录成功自动跳转首页)

    一.React加载数据流程回顾 先看上一节的产品详情代码:https://blog.csdn.net/u010132177/article/details/103184176 [Pcontent.js ...

  9. HDU 5504:GT and sequence

    GT and sequence  Accepts: 95  Submissions: 1467  Time Limit: 2000/1000 MS (Java/Others)  Memory Limi ...

  10. netty权威指南学习笔记一——NIO入门(3)NIO

    经过前面的铺垫,在这一节我们进入NIO编程,NIO弥补了原来同步阻塞IO的不足,他提供了高速的.面向块的I/O,NIO中加入的Buffer缓冲区,体现了与原I/O的一个重要区别.在面向流的I/O中,可 ...