为什么exception无法捕获spring 中proceedingJoinPoint类中的 proceed的异常?

在Spring AOP的环绕通知控制事务时,使用proceedingJoinPoint类中的 proceed 放行原始方法时需要抛出一个异常,但只能使用Throwable捕获

0

1个回答

Spring AOP异常捕获原理:
被拦截的方法,须显式的抛出异常,且不能做任何处理,
这样AOP才能捕获到方法中的异常,进而进行回滚。
换句话说,就是在Service层的方法中,不需要使用 try...catch
或者在catch中的最后加上 throw new RuntimeException(); 这样程序才会被AOP捕获,进而进行回滚。

2
willlau22011
willlau22011 此乃正解,给大佬点赞
17 天之前 回复
qq_23126581
玄元复始道生初,守一无穷尽万物 回复devmiao: 我不是大牛哦,很菜的。向你们学习呢
11 个月之前 回复
devmiao
见了你女王大人喵姐还不跪下 说的很多,给大牛点赞
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java异常中Exception捕获不到的异常
一 概念 众所周知java提供了丰富的异常类,这些异常类之间有严格的集成关系,分类为 父类Throwable Throwable的两个子类Error和Exception Exception的两个子类CheckedException和RuntimeException 二 发现问题 通常捕获异常catch的时候最大catch到Exception这个类就为止了,当然这能够处理大部分的异常...
异常(exception)不能捕获
一个aspx中(设名为main.aspx)有一张图片(System.Web.UI.WebControls.Image),其imageUrl设置为另一个aspx文件(设名为Picture.aspx),这个aspx文件并没有任何html代码,其page_load方法使用Response.BinaryWrite 方法返回一个gif字节流。当main.aspx是起始页,运行时如果Picture.aspx中的代码发生一个异常(如被0除),该异常不被浏览器显示,用户看到的只是该图片显示为一个红叉。(如果是main.aspx中发生一个异常,浏览器将显示该异常的详细信息)。请问如何才能捕获这样的异常?
无法捕获该异常:Unhandled exception at 0x00000000
我用MFC写了个应用程序,因为需要用到一个外部的DLL。rn采用的是动态方式调用DLL的内部接口函数。rnrneg: rnrn(MyConnectDev 该函数指针的详细信息略过)rnrn[color=#FF0000]myConnectDev = (MyConnectDev)::GetProcAddress(hInst, "ConnecGetDev"[/color]);rn// 这里故意将对应的函数名改错,以引起后面的异常!rnrn调用如下:rnrn[color=#FF0000]tryrnrn int a = myConnectDev(...);rnrncatch(...)rnrn MessageBox(_T("捕获到该异常"));rn[/color]rnrn该函数是可以正常调用的,但我试了下,将[color=#FF0000]"ConnecGetDev"[/color]故意写错,rn这时会跑出如下的异常:rnrn[color=#FF0000]Unhandled exception at 0x00000000 in MyMFCApp.exe: rn0xC0000005: Access violation reading location 0x00000000.[/color]rnrn这个异常在 catch 语句中根本无法捕获,因此很疑惑。rn想问下各位该异常该如何来处理。 谢谢大家!rn
用Exception类捕获所有异常
"java大数据培训学校全套教材"系列课程由750集视频构成,基本就 是1)时下流行的java培训学校主流内部教材,2)和市面上培训学校的通 行的课程体系几乎一样。所以这套课程都能自己学下来,等于上了培训学 校一次,完全可以找个java工程师的工作了。rn 本门课程为"java大数据培训学校全套教材"系列课程的第六篇,通过学习异常,多重捕获,等相关概念,让大家对异常编程打下好的基础。
为什么无法捕获ClinetSocket的异常?
tryrn ClientSocket1.Active:=true;rnexceptrn showmessage('error');rnend;rn 但还是会出来ESocketError异常,'Asynchronous socket error 10061'。有什么办法捕获这个异常,不让这个异常出来呢?
请问捕获Exception类中的详细信息,求助!!!!!!
[code=C#] public class StringNotFound : Exceptionrn rn public string str get; set; rnrn public StringNotFound()rn rn rnrn public StringNotFound(string name)rn rn str = name;rn rnrn public StringNotFound(string name, Exception innerException)rn : base("String Not Found", innerException)rn rn str = name;rn rnrn public StringNotFound(string name, string message, Exception innerException)rn : base(message, innerException)rn rn str = name;rn rn [/code]rnA,B 2个工程在一个solution下,A是类库工程,我在上面定义一个异常类,rn步骤:rn1.在A中会有代码直接抛出异常: throw StringNotFound(“myName”);rn2.B引入类库A工程,然后调用步骤1里的代码。我在B中写个try-cathch语句来捕获异常,rn[code=C#]rntryrncatch(Exception e)rnrn Console.WriteLine(e.InnerException.Message);rn[/code]rnrn我想让在B中捕获的异常信息更具体一些,比如是输出时 ”myName srting Not Found“,rnrn请问怎么实现?
Exception为什么不能捕获?
public static void AddUser(string n, string f)rn rn try rn rn userTable.Add(n, new UserInfo(n, f));rn rn catch(Exception)rn rn // code cannot run even to here!!!rn throw;rn rn rnrn//rntry rnAddUser("HEllo", "world");rn catch(Exception) rn // Code cannot run to herern
在spring boot中如何自定义Exception异常
载着干货的老司机 下图示例: 在service的方法中进行判断年龄,参数一:message,super关键字,调用父类的message,参数二:code,均为自定义,具体方法如下: @ControllerAdvice:在于捕获controller中出现的异常 @ExceptionHandler:指定使用的异常类 @ResponseBody:返回相应的数据 完成上述工作你会神...
Python中的异常(Exception)
python学习笔记之异常(Exception)
在spring中怎样捕获非配置类异常
标题描述不太清楚,具体问题是这样的rnrn在spring中rn1)使用SchedulerFactoryBean"定时运行一段工作流的程序。rn2) 而工作流的类并不是集成在spring中,不是spring来实例化,而是通过程序中实例化。rn 例如:Workflow workflow = new BasicWorkflow(callerID);rn3)当工作流程序在运行的时候会抛出异常,最后也让定时的运行的所有程序因为这个异常而终止。 rnrn问题的关键就是:工作流程序不是通过spring托管实例化,spring就不能处理工作流程序抛出的异常,从而不能让后续定时程序继续运行。rnrn我想在spring中捕获这个异常,怎么办呢,谢谢先
捕获spring RestController中的异常,并记录日志
在使用spring的时候,如果Controller中抛出异常,会被spring显示在客户端界面,而日志中一般没有记录。客户端对异常的显示也是经spring处理后的信息,没有堆栈,这不方便找错和改错。可以通过RestControllerAdvice注解定义一个异常处理类来解决这个问题。代码如下注:也可以不继承ResponseEntityExceptionHandler类,此处继承只是省了一些通用异常...
Spring中如何捕获cp30连接池异常?
环境:windows,struts2+spring+hibernate+mysql,使用cp30连接池。rn问题描述:我在Spring中配置了两个dataSource,分别连不同的mysql数据库,利用Spring2.x的版本中采用Proxy模式,实现一个虚拟的数据源。假设当某台数据库宕机之后,可以使用连接另外一台mysql服务器的dataSource来继续提供服务。rn现在的问题是如何在determineCurrentLookupKey()中知道某个数据源是否出错,因为数据源的选择逻辑封装在AbstractRoutingDataSource的determineCurrentLookupKey()中。参考:http://baike.baidu.com/view/4146963.htmrnapplicationcontext.xml代码:rn[code=XML]rnrnrnrn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn org.hibernate.dialect.MySQLInnoDBDialectrn rn updatern rn truern rn truern rn rn rnrn[/code]rnrn动态数据源类,这个类继承AbstractRoutingDataSourcern[code=Java]rnpackage dataSource;rnrnimport java.sql.SQLException;rnimport org.springframework.beans.BeansException;rnimport org.springframework.context.ApplicationContext;rnimport org.springframework.context.ApplicationContextAware;rnimport org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;rnimport com.mchange.v2.c3p0.PooledDataSource;rnrn//建立动态数据源类,这个类继承AbstractRoutingDataSourcernpublic class DynamicDataSource extends AbstractRoutingDataSource implementsrn ApplicationContextAware rn private ApplicationContext applicationContext;rnrn public void setApplicationContext(ApplicationContext applicationContext)rn throws BeansException rn this.applicationContext = applicationContext;rn rnrn protected Object determineCurrentLookupKey() rn PooledDataSource dataSourceA = (PooledDataSource) applicationContextrn .getBean("DataSourceA");rn PooledDataSource dataSourceB = (PooledDataSource) applicationContextrn .getBean("DataSourceB");rn rn if(dataSourceA==null||dataSourceA.equals("")||dataSourceB==null||dataSourceB.equals(""))rn if(dataSourceA==null||dataSourceA.equals(""))rn DataSourceContext.setDataSource(DataSourceName.DataSourceB);rn elsern DataSourceContext.setDataSource(DataSourceName.DataSourceA);rn rn rn elsern try rn System.out.println("A-》空闲连接:"rn + dataSourceA.getNumIdleConnectionsAllUsers() + " 正在使用的连接:"rn + dataSourceA.getNumBusyConnectionsAllUsers() + " 总连接数:"rn + dataSourceA.getNumConnectionsAllUsers());rn System.out.println("B-》空闲连接:"rn + dataSourceB.getNumIdleConnectionsAllUsers() + " 正在使用的连接:"rn + dataSourceB.getNumBusyConnectionsAllUsers() + " 总连接数:"rn + dataSourceB.getNumConnectionsAllUsers());rn if (dataSourceA.getNumIdleConnectionsDefaultUser() < dataSourceBrn .getNumIdleConnectionsDefaultUser()) rn DataSourceContext.setDataSource(DataSourceName.DataSourceA);rn else rn DataSourceContext.setDataSource(DataSourceName.DataSourceB);rn rn catch (SQLException e) rn e.printStackTrace();rnrn rn rn System.out.println(DataSourceContext.getDataSource());rn return DataSourceContext.getDataSource();rn rnrnrn[/code]rn两个辅助类,分别是用来获得和设置上下文环境的类,主要负责改变上下文数据源的名称,数据源名称常量类,对应applicationcontext.xml中数据源Bean的rn代码如下:rn[code=Java]rnpackage dataSource;rnrn//建立一个获得和设置上下文环境的类,主要负责改变上下文数据源的名称rnpublic class DataSourceContext rn rn @SuppressWarnings("unchecked")rn private static final ThreadLocal context = new ThreadLocal(); // 线程本地环境rnrn // 设置数据源类型rn @SuppressWarnings("unchecked")rn public static void setDataSource(String dataSource) rn context.set(dataSource);rn rnrn // 获取数据源类型rn public static String getDataSource() rn return (String) context.get();rn rnrn // 清除数据源类型rn public static void clearDataSource() rn context.remove();rn rnrn[/code]rnpackage dataSource;rnrn//数据源名称常量类rnpublic class DataSourceName rn public static final String DataSourceA="DataSourceA";rn public static final String DataSourceB="DataSourceB"; rnrn[code=Java]rn[/code]
如何捕获jsp中的exception?
为了捕获jsp文件里的exception,本人写了下面的方法,但是测试并没有成功。大家能否帮看下,帮我找找原因。rn在web.xml文件中配置捕获Throwable exception的servlet:rn rn exceptionHandlerrn com.ibm.partnerworld.incentives.management.action.BPIMSExceptionHandlerServletrn rn errorPageURLrn error.wssrn rn 3rn rn rn exceptionHandlerrn /errorrn rn rn java.lang.Throwablern /errorrn rnrn然后BPIMSExceptionHandlerServlet.java:rn/**rn * rn */rnpackage com.ibm.partnerworld.incentives.management.action;rnrnimport java.io.IOException;rnrnimport javax.servlet.ServletContext;rnimport javax.servlet.ServletException;rnimport javax.servlet.http.HttpServlet;rnimport javax.servlet.http.HttpServletRequest;rnimport javax.servlet.http.HttpServletResponse;rnimport javax.servlet.http.HttpSession;rnrnimport org.apache.struts.Globals;rnrn/**rn * @author jianghaifengrn * rn */rnpublic class BPIMSExceptionHandlerServlet extends HttpServlet rn /**rn * rn */rn private static final long serialVersionUID = 1L;rnrn public void doPost(HttpServletRequest request,rn HttpServletResponse response) throws ServletException, IOException rn try rnrn Throwable exception = null;rn rn // Check if struts has placed an exception object in requestrn Object obj = request.getAttribute(Globals.EXCEPTION_KEY);rnrn if (obj == null) rn // Since no struts exception is found,rn // check if a JSP exception is available in request.rn obj = request.getAttribute("javax.servlet.jsp.jspException");rn rnrn if ((obj != null) && (obj instanceof Throwable)) rn exception = (Throwable) obj;rn rn //&&&&& for testrn// obj = new NullPointerException("aaaaaatest");rn// request.setAttribute("errorMessage", obj);rn// HttpSession session = request.getSession(true);rn// session.setAttribute("errorMessage", obj);rn //&&&&&rn rn String requestURI = getServletConfig().getInitParameter("errorPageURL");rn String path = request.getRequestURL().toString();rn int index = path.lastIndexOf("/");rn rn //assemble the url which direct to the error pagern String url = path.substring(0, index) + "/" + requestURI;rnrn //redirect urlrn response.sendRedirect(url);rn rn catch (Exception e) rn // Throwing exceptions from this method can result in requestrn // going in to an infinite loop forwarding to the error servletrn // recursively.rn// e.printStackTrace();rn rn rn rn public void doGet(HttpServletRequest request,rn HttpServletResponse response) throws ServletException, IOException rn doPost(request, response);rn rnrnstruts config文件中配置了处理转向后的uri请求的处理:rn rn rn rn rn并且写了Error.javarnpackage com.ibm.partnerworld.incentives.management.action;rnrnimport javax.servlet.http.HttpServletRequest;rnimport javax.servlet.http.HttpServletResponse;rnimport javax.servlet.http.HttpSession;rnrnimport org.apache.struts.action.ActionError;rnimport org.apache.struts.action.ActionErrors;rnimport org.apache.struts.action.ActionForm;rnimport org.apache.struts.action.ActionForward;rnimport org.apache.struts.action.ActionMapping;rnimport org.apache.struts.action.ActionMessage;rnrn/**rn * @version 1.0rn * @authorrn */rnpublic class Error extends BPIMSActionrnrnrnrn public ActionForward execute(ActionMapping mapping, ActionForm form,rn HttpServletRequest request, HttpServletResponse response)rn throws Exception rnrn ActionErrors errors = new ActionErrors();rn ActionForward forward = new ActionForward(); // return valuernrn try rn //&&&&&&&&& for testrn// HttpSession session = request.getSession(true);rn// Object obj = session.getAttribute("errorMessage");rn// ActionMessage am = new ActionMessage("error.system", "why!!!!!!");rn// request.setAttribute("errorMessage", String.valueOf(obj));rn// System.out.println("sssssssssssss" + String.valueOf(obj));rn// errors.add("errorMessage", am);rn //&&&&&&&&&rn rn catch (Exception e) rnrn // Report the error using the appropriate name and ID.rn errors.add("name", new ActionError("id"));rn rnrn // Forward control to the appropriate 'success' URI (change name as desired)rn forward = mapping.findForward("success");rnrn // Finish withrn return forward;rnrn rnrn现在的问题是我在jsp中hard code一个NullpointerException 异常,它直接就抛到页面上显示出来了,在BPIMSExceptionHandlerServlet中捕获不到,不知道是什么原因?rn预想的结果是:在jsp页面上出现任何异常之后,比如NullpointerException异常,不让它直接抛到页面上被客户看到,而是让异常被BPIMSExceptionHandlerServlet捕获到,然后经struts转向到一个友好的页面error.jsp。大家有什么好办法吗?
exception 类处理异常
实现一个异常测试程序,主动模拟抛异常,并自己捕获,完成多层结构异常测试,了解异常规范。rnrn完全看不懂exception是怎么用的~~
异常类的基类:exception
<p>rn <br />rn</p>rn<p style="font-family:&quot;color:#3D3D3D;font-size:16px;background-color:#FFFFFF;">rn 扫码进入学习群,领取学习资料+讲师答疑rn</p>rn<div>rn <br />rn</div>rn<img src="https://img-bss.csdn.net/201908080328096578.png" alt="" /> rn<p>rn <br />rn</p>rn<p>rn <br />rn</p>rn<p>rn 本教程是C++ Primer Plus 6th 、The C++ Programming Language_4th、Thinking in C++等国外顶级的C++著作的精华和个人超过10年的C++使用经验的完美结合。rn</p>
JAVA 中异常的捕获
在java中具有很多的异常信息,对于这些异常信息,常常需要进行捕获处理的。常见的异常处理信息: (1)try - catch ①正常情况下的信息:执行try ②不正常的情况,类型不匹配:执行try ③不正常,类型匹配:执行try - catch (2)try - finally 这种情况是无论程序是否有异常,程序都会执行finally中的信息 ①正常情况下执行:try - final...
dll中异常的捕获
大家好,小弟最近做一个小项目,把一些重要的代码封装在DLL里,DLL会触发一些异常,本来是打算在DLL外的应用程序里将其捕获,但结果却出人意料,总是出现错误,程序中断,捕获不到!请大家指点可以怎么改进!谢谢!rn 下面提示的错误:rn[img=C:\Documents and Settings\Administrator\桌面\QQ截图20120411115658][/img]
python中异常的捕获
一 捕捉异常 在Python中使用try…except 结构创建 ’ 隔离区 ‘,也就是进行异常处理 try 包含的部分是放入可能出现异常的代码 except 部分是来处理发生的异常 结构是: try: 可能引起异常的代码 except: 对异常的处理代码 二 捕获多个异常 三 捕获所有异常 五 try…finally try…finally…语句用来表达这样的情况: 在程序中,如果...
Java中异常与捕获
try catch final throw关键字 throws关键字
无法捕获的异常
在TextBox中输入"<"后,提交页面会出现异常,而且在Page_Load事件中无法捕获该异常,rn若使用验证控件可防止出现这种情况,但如果有很多TextBox控件哪可怎么办,必须为没个rnTextBox写一个验证控件,不知道有什么好的方式吗?rn在DataGrid的编辑事件中出现的TextBox中如何来防止出现这种情况?
为什么IO类异常必须捕获???
因为它们发生的几率很大么?rn还是其他的愿意呢???rnrn还有一个问题,如果我向一个工程中,导入两个个jar包,功能相同,但是是不同版本的。在使用的时候,会出现什么情况呢?
请问有没有什么异常catch(Exception ex)无法捕获
如题rn
为什么继承自Exception的类 无法捕获异常
[code=C#]rnclass MyException : Exceptionrnrn private Dictionary m_data = new Dictionary();rn private int index=0;rn public int MyIndexrn rn setrn rn index = value;rn rn rn public MyException()rn rn m_data.Add(-1, "true");rn m_data.Add(1, "找不到指定item");rn rn public override string Messagern rn getrn rn switch (index)rn rn case 0: break;rn default: return m_data[index];rn rn return base.Message;rn rn rnrn[/code]rn如下图 调试时 提示错误 却不捕获异常rn[img=http://hi.csdn.net/attachment/201102/16/4303951_1297834628B0ql.jpg][/img]
为什么捕获不到异常?
我用vc连oracle(ODBC),代码如下:rnCDatabase db;rndb.OpenEx(...);rntryrnrndb.ExecuteSQL(_T("call proc_xxx('aa')"));rnrncatch(CDBexception* e)rn...rndb.closernrn其中proc_xxx是一个存储过程,操作是删除ID为“aa”的记录。但是实际数据库中rn并没有ID为“aa”的记录,所以肯定是应该抱错的。用SQL PLUS 执行这个SQL语句就抱错,可是到了MFC 程序里就捕获不到这个异常了,为什么?rn
为什么捕获不到异常
[code=Java] static class WebServiceHolder rn rn static ImplService instance = new ImplService(WSDL_LOCATION, SERVICE);rn rn rnrn public static ImplService getInstance() throws Exceptionrn tryrn rn return WebServiceHolder.instance;rn rn catch(Exception e)rn rn throw e;rn rn [/code]rnrn我在调用getInstance()时,如果网络连接不上时,怎么捕获不到异常呢,不会进入catch块rnrn为什么
用Exception类捕获所有异常---马克-to-win java视频
用Exception类捕获所有异常---马克-to-win java视频的介绍
Java中异常(Exception)的用法
package com.base.exception; public class Car { String name; public Car() { // TODO Auto-generated constructor stub this.name = &quot;&quot;; } public Car(String name) { // TODO Auto-generated ...
Java中自定义Exception异常
Java中自定义的异常一般继承自Exception,这里就简单地说说。 先通过继承自定义异常类。package cn.defineException;//自定义异常:SeeWorld public class SeeWorldException extends Exception{ public SeeWorldException(){ } public SeeWorld
java中的异常(Exception)介绍
java中的异常(Exception)介绍(1) 异常(Exception)是指正常程序不能处理或者没有处理的异常情况或者异常事件。
Java中的Exception异常 自定义异常
   原文: http://www.itzhai.com/java-based-notebook-java-exceptions-in-the-exception-custom-exception.html   public class Exception extends Throwable Exception 类及其子类是 Throwable 的一种形式,它指出了合理的...
无法捕捉异常:First-chance exception
我的程序里调用 我同事的DLL, 他用的C++BUILDER ,我是MFCrn程序时捕获不了他的异常rn这是异常:rnFirst-chance exception in DemoCodeApp.exe (KERNEL32.DLL): 0x0EEDFADE: (no name).rn[code=c]rn tryrn rn rn if (SendDeviceCommand(Current , ControlWord)) rn rn MessageBox("命令成功");rn rn elsern MessageBox("命令失败");rn rnrn catch (CException)rn rn MessageBox("参数错误"); [color=#FF0000]//这里捕获不到[/color]rn rn[/code]
Android 中如何捕获未捕获的异常
(一)UncaughtExceptionHandler 1、自定义一个Application , 比如叫MyApplication 继承Application 实现UncaughtExceptionHandler。 2、覆写UncaughtExceptionHandler 的onCreate 和uncaughtException 方法。 @Override public void o
vs2005用哪种exception捕获参数异常
DATArnargumentrnsysrn还一个选项忘了rnrn今天结业考试中难到的题
spring中的maven异常:maven无法
使用maven的install命令:运行后的异常截图,为:解决方案:src/main/java与src/main/test中的文件所在的package名不同。截图如下:将包名统一即可。如图:修改后实现效果:亲测可行。...
Exception异常类的属性方法
[link]http://tool.oschina.net/apidocs/apidoc?api=jdk-zh 以上是API的连接。 它的方法都是从父类中 继承过来的。 ##1、 从 getMessage 这个方法的签名来看,非常类似 getXXX 方法,我们有理由相信,在 Throwable 这个类中包含一个私有的 message 属性,而这个 getMessage()方法就是用来获得 那个 ...
php Exception异常类备注
Exception::__construct — 异常构造函数Exception::getMessage — 获取异常消息内容Exception::getPrevious — 返回异常链中的前一个异常Exception::getCode — 获取异常代码Exception::getFile — 创建异常时的程序文件名称Exception::getLine — 获取创建的异常所在文件中的行号Exce...
如何捕获DLL中的异常
现在我需要调用一个DLL完成较复杂的事务rn而这个DLL本身也是多线程的rnrn我发现这个DLL有时会出现很严重的错误rn比如非法内存读写等等rn从而导致整个软件崩溃推出rnrn我该用什么方法来捕获这些异常?rn再说一下,这个DLL本身也是多线程的
Java中异常的声明和捕获
声明:将问题标识出来,报告给调用者
java7中捕获多个异常
java7捕获多个异常,简化语法;
MVC.NET 中异常的捕获和判断
首先,写Exception类的extensions public static string ToStrings(this Exception ex) { if (ex == null) { return string.Empty; } var res...