0 0

一个关于aop的异常5

这是我的连接数据库的类:
@Component
@Scope("prototype")
public class DaoConfig {
private static String url = "jdbc:sqlserver://localhost:1433;DatabaseName=BBS2.0";
private static String user = "sa";
private static String password = "sasa";
private static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
public static Connection conn ;
public static Statement sm ;
public static ResultSet rs;

static {
try {
Class.forName(driver);
conn = getConnnection();
sm = conn.createStatement();
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
    e.printStackTrace();
    }
}

public static Connection getConnnection() {
try {
return DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}

我的dao类继承这个类,并且用的都是sql语句,下面是其中一个方法:
public Post getPost(int postId) {
String sql = "select * from post where postId = "+postId+"";
try {
rs = sm.executeQuery(sql);
rs.next();
Post post = new Post();
post.setPostId(postId);
post.setPosttitle(rs.getString(2));
post.setPostContent(rs.getString(3));
post.setParentId(rs.getInt(4));
post.setPostDate(rs.getTimestamp(5));
return post;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException();
}
}

我想用aop将每个dao类最后加上close语句
@After("daoClose()")
public void after() {
System.out.println("000000000000000000000");
try {
if(daoConfig.rs != null) {
daoConfig.rs.close();
}
if(daoConfig.sm != null) {
daoConfig.sm.close();
}
if(daoConfig.conn != null) {

daoConfig.conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

结果确报异常:
com.microsoft.sqlserver.jdbc.SQLServerException: 该语句已关闭。
2013年4月09日 18:16

3个答案 按时间排序 按投票排序

0 0

aop 把DaoConfig 可拦截了吧,子类调用父类方法时,aop发现父类方法执行结束,就启动了

2013年4月12日 11:48
0 0

你做的其实是类似于Spring事务管理机制的 实现思路的核心应该用 ThreadLocal去实现

你的这种方式没法并非

2013年4月10日 16:48
0 0

你这个异常是在第二次调用操作数据库的方法时报的错吧?
第一次执行完后,after方法把daoConfig.conn也给关了,第二次还怎么用?

2013年4月10日 10:50

相关推荐

    C# .net Aop 动态截获异常

    1. **定义特性(Attribute)**:创建一个自定义特性,用于标记那些可能抛出异常的方法。例如,可以创建一个名为`[HandleException]`的特性,将其应用于可能抛出异常的方法上。 ```csharp [AttributeUsage...

    使用Spring AOP对异常进行统一处理

    3.处理日志时,需要在每一个try-catch块包含一些处理代码,有时候异常处理的代码比正常执行代码还多,污染正常执行代码。 4.同样类型异常有不同的处理方式,使最终的处理变得复杂。 5.接口抛出异常,破坏封装,打破...

    spring.net结合三层AOP异常日志记录功能

    Spring.NET是中国开源社区基于.NET Framework实现的一个轻量级企业级应用框架,它借鉴了Java平台上的Spring框架,为.NET开发者提供了强大的依赖注入(Dependency Injection,DI)和面向方面编程(Aspect-Oriented ...

    Java Web开发异常处理方式及AOP技术

    例如,我们可以定义一个切面,包含一个`@AfterThrowing`注解的方法,这个方法将在目标方法抛出异常后执行。`@AfterThrowing`注解可以指定要拦截的方法签名、异常类型,甚至可以传递抛出的异常对象给通知方法。 ```...

    利用AOP和注解来保存异常项目

    最近一直在研究怎么更好更便捷的来保存异常,传统的log4j都是对每个类进行异常每个控制层的方法都有些try,catch感觉很麻烦,于是,自己用AOP和注解的方式结合log4j来实现统一的异常保存,废话不多说,上传项目。

    个人整理的关于AOP概念

    6. **目标对象(Target Object)**:被一个或多个切面通知的对象,通常是被代理的对象。 7. **AOP代理(AOP Proxy)**:由AOP框架创建的对象,负责执行切面的逻辑,如JDK动态代理或CGLIB代理。 8. **织入(Weaving)**:...

    一个简单的aop demo

    标题 "一个简单的AOP demo" 暗示我们将探讨面向切面编程(Aspect-Oriented Programming,简称AOP)的基本概念以及如何通过一个简单的实例来理解它。在软件开发中,AOP是一种编程范式,它允许我们分离关注点,比如...

    一个简单的spring AOP的实现

    对于提供的文件名"mySpring",可能是一个包含Spring配置或示例代码的文件,其中可能包含了关于如何实现Spring AOP的具体步骤和示例。通过查看这个文件,我们可以更深入地理解Spring AOP的实际应用和配置。在实际开发...

    spring boot demo (包括异常处理 aop redis的整合)

    例如,可能有一个`GlobalExceptionHandler`类处理全局异常,一个`MyAspect`类实现AOP切面,以及一些配置类如`RedisConfig`用于设置和初始化Redis连接。此外,业务逻辑代码中可能会使用`@Cacheable`等注解,以及`...

    Android-Jet-AOP一个AndroidAOP框架

    **Android-Jet-AOP:一个Android AOP框架详解** Android应用程序的开发过程中,代码的组织和维护是一项重要的任务。为了提高代码的可读性、可维护性和模块化,开发者经常采用设计模式和特定的编程技术。其中,面向...

    spring aop spring aop

    例如,在上述代码中的`PersonProxy`类就是一个切面,它定义了`before()`和`after()`方法作为通知。 2. **切点(Pointcut)**:切点是程序执行流程中的特定位置,比如某个方法的调用。在示例代码中,`@Before(...

    aopalliance最新完整jar包

    aopalliance是一个Java库,它提供了一个统一的接口,使得不同的AOP框架(如AspectJ、Spring AOP等)能够相互协作。这个库是AOP在Java世界中的一个关键组件,因为它的API成为了多个AOP实现之间的标准。 在Java应用中...

    aop开发环境jar包

    在实际开发中,版本不匹配经常会导致类加载错误、运行时异常或者功能缺失,所以一个妥善打包的AOP环境可以大大提升开发效率。 标签“aop环境”进一步明确了这个压缩包与AOP开发相关,可能包含以下组件: 1. **...

    aop+exception的测试代码

    4. **编写测试方法**:在测试类中,创建一个会抛出异常的方法,并使用断言确保AOP通知被正确执行。 总结一下,"aop+exception"的测试代码主要涉及Spring AOP中的异常处理,可能涵盖了定义切面、通知、事务管理和...

    aop所依赖的所有包

    AOP Alliance是一个接口集,定义了AOP框架之间的通用API,使得不同的AOP实现能够互操作。它定义了一些基础的切面接口,如Advisor(顾问)、Pointcut(切点)和Advice(通知),这些接口在不同的AOP框架中通用,有助...

    实现AOP的一个例子

    它可以是一个或多个方法、类或特定的执行条件。切点表达式用于定义这些条件,通常使用正则表达式或专门的语法。 4. **连接点(Join Point)**:程序执行中的特定点,如方法调用或异常抛出。连接点是可能插入通知的...

    Spring Aop四个依赖的Jar包

    Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要模块,它通过提供声明式的方式来实现面向切面编程,从而简化了应用程序的开发和维护。在Spring AOP中,我们无需深入到每个...

    spring aop jar 包

    例如,我们可以定义一个切面来处理所有数据库操作的事务,这样无需在每个业务方法中显式调用开始和提交事务,只需在切面中配置事务规则即可。 `aop-jar`这个压缩包可能包含了Spring AOP的实现类、接口、以及其他...

    Java AOP 公共异常处理,一个没有try的项目。.zip

    在实际开发中,公共异常处理是一个常见的AOP应用场景,用于统一处理可能出现的异常,提高代码的可读性和可维护性。在"Java AOP 公共异常处理,一个没有try的项目"中,我们可以探讨如何利用AOP实现优雅的异常管理,...

    一个简单aop分享.zip

    本次分享的"一个简单aop分享.zip"可能包含了一次关于如何在Spring框架中使用AOP进行编程的讲解。 首先,理解AOP的基本概念非常重要。切面(Aspect)是关注点的模块化,它封装了跨越多个对象的行为或责任。通知...

Global site tag (gtag.js) - Google Analytics