建立表
DROP TABLE t_book;
CREATE TABLE t_book(
book_id INT,
book_name VARCHAR2(20),
book_author VARCHAR2(10)
);
1:定义注释
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.ElementType;
@Target({ElementType.METHOD})
@Retention(RUNTIME)
public @interface Trans {
int myvalue();
}
2:Spring配置文件
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>//设置为自动代理
<bean id="transAspect" class="com.lovo.annotation.TransactionAspect"></bean>//设置代理类
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@localhost:1521:orcl</value>
</property>
<property name="username"><value>scott</value></property>
<property name="password"><value>tiger</value></property>
</bean>
<bean id="bookService" class="com.cl.annotation.BookService">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="trans">
<ref bean="transactionTemplate"/>
</property>
</bean>
3:业务类
public class BookService {
private TransactionTemplate trans;
private DataSource dataSource;
public TransactionTemplate getTrans() {
return trans;
}
public void setTrans(TransactionTemplate trans) {
this.trans = trans;
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
@Trans(myvalue=TransactionTemplate.PROPAGATION_REQUIRED)//利用注释设置申明事务值
public void createBook(){
JdbcTemplate jdbc = new JdbcTemplate(dataSource);
jdbc.update("insert into T_BOOK values('1','Spring3 in Action','xxx')");
}
}
4:代理类
@Aspect
public class TransactionAspect {
@Around("execution(@com.cl.annotation.Trans * *.*(..))")//设置AOP切入条件为在com.cl.annotation.
public Object inTransaction(final ProceedingJoinPoint pjp) {
TransactionTemplate trans = (TransactionTemplate)SpringUtil.getContext().getBean("transactionTemplate");
MethodSignature sig = (MethodSignature) pjp.getSignature();
Method method = sig.getMethod();
Trans antrans = (Trans) method.getAnnotation(Trans.class);
trans.setPropagationBehavior(antrans.myvalue());//设置事务处理级别
return trans.execute(new TransactionCallback(){
public Object doInTransaction(TransactionStatus ts) {
Object result = null;
try {
System.out.println("切入之前");
result=pjp.proceed();
System.out.println("切入之后");
} catch (Throwable e) {
ts.setRollbackOnly();
e.printStackTrace();
}
return result;
}
});
}
}
分享到:
相关推荐
在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)则是其重要组成部分,它允许我们分离关注点,尤其是跨切面的系统级服务,如日志、事务管理等。AspectJ是Spring AOP支持的一种强大...
虽然Spring AOP提供了方便的注解式编程,但有时我们需要更复杂的切入点表达式或者更灵活的控制,这时AspectJ就派上用场了。AspectJ是一个独立的AOP框架,它的切入点表达式更为强大,支持类型匹配、方法参数匹配等。 ...
首先,Spring AOP是Spring框架对传统面向对象编程的补充,它主要处理那些分散在应用程序各处的横切关注点,如日志、事务管理、性能监控等。通过AOP,这些关注点可以被模块化为独立的切面,从而提高代码的可读性和可...
在Spring框架中,提供了多种事务管理方式,其中之一就是基于AspectJ的事务控制。本文将深入探讨如何在Spring中利用AspectJ实现事务控制。 首先,我们需要理解什么是AspectJ。AspectJ是一种面向切面编程(AOP)的...
这篇博客“Spring AOP + AspectJ in XML配置示例”旨在指导开发者如何在XML配置中实现Spring AOP和AspectJ的结合。 首先,我们需要理解AOP的基本概念。AOP通过将关注点(如日志、事务管理)与业务逻辑分离,提高了...
【Android + 反射 + 代理 + 静态代理 + AspectJ】 面向切面编程(AOP)是一种编程范式,与面向对象编程(OOP)相对,它旨在将关注点分离,使得通用功能(如日志记录、事务管理等)可以从核心业务逻辑中解耦。AOP 的...
《Spring AOP与AspectJ深度解析》 在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱。其中,Spring的面向切面编程(AOP)特性极大地简化了代码的维护和扩展。AspectJ是Spring AOP的重要组成部分,...
`aspectjweaver-1.6.9.jar`是AspectJ的编译器和运行时库,AspectJ是一种强大的面向切面编程(AOP)框架,可以将关注点(如日志、事务管理)与核心业务逻辑分离。 `mysql-connector-java-5.1.0-bin.jar`是MySQL...
maven+spring+springMVC+mybatis 框架搭建 Maven 是一个优秀的项目管理和构建工具,Spring 是一个广泛使用的 Java 框架,SpringMVC 是基于 Spring 的一个 Web 框架,MyBatis 是一个持久层框架。在这个项目中,我们...
### SpringMVC + Spring + MyBatis 整合配置详解 #### 一、技术栈介绍与选择 在本文档中,我们将详细介绍如何整合SpringMVC、Spring和MyBatis这三大框架来构建一个简单的Web应用。这三个框架在Java Web开发领域内...
10. **spring-aop-4.2.5.RELEASE.jar**:Spring AOP模块提供了面向切面编程的支持,与AspectJ Weaver结合使用,可以实现声明式事务管理、缓存、性能监控等功能。 通过这些库,开发者可以构建一个完整的Spring + ...
本书以AOP基础理论为主线,首先讲解AOP的产生与发展、为什么要应用AOP、AOP的核心概念,然后详细讲解AspectWerkz、AspectJ、Spring框架的AOP应用开发技术。 随书附赠的光盘内容为本书开发的案例程序包。本书内容循序...
本书以AOP基础理论为主线,首先讲解AOP的产生与发展、为什么要应用AOP、AOP的核心概念,然后详细讲解AspectWerkz、AspectJ、Spring框架的AOP应用开发技术。 随书附赠的光盘内容为本书开发的案例程序包。本书内容循序...
这些操作可以利用AOP进行增强,如事务处理、错误处理、性能统计等。 5. **安全性考虑**:使用AOP确保 Realm 对象的正确关闭,防止内存泄漏。 Realm 对象如果不正确关闭,可能会持续占用内存,影响应用性能。 6. **...
4. **aspectjweaver-1.6.10.jar**:AspectJ是AOP(面向切面编程)的实现,Spring框架利用它进行声明式事务管理和其他横切关注点,如日志、性能监控等。 5. **jackson-all-1.8.2.jar**:Jackson是一个流行的JSON处理...
标题中的"spring+springmvc+hibernate+redis 需要的jar包"指的是一套基于Java的Web开发框架组合,其中包含了Spring、SpringMVC、Hibernate和Redis四个关键组件。这些技术通常用于构建高效、可扩展的后端应用。 ...
标题"spring和aspectj的aop实验"表明我们将探讨如何在Spring中使用AspectJ进行AOP实践。这通常涉及到创建切面、定义通知、配置织入策略以及测试其效果。 1. **什么是AOP** AOP的核心概念是切面(Aspect),它封装...
* org.springframework.aspects-3.0.6.RELEASE:提供了对 AspectJ 框架的整合 * org.springframework.beans-3.0.6.RELEASE:提供了 IoC(依赖注入)的基础实现 * org.springframework.context.support-3.0.6.RELEASE...
### AspectJ in Action: Enterprise AOP with Spring Applications #### 关键知识点概述 1. **Spring-AspectJ集成:**本书重点介绍了Spring框架与AspectJ相结合的技术优势及其在企业级应用中的强大功能。 2. **...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者定义“切面”,这些切面封装了关注点,如日志、事务管理或性能度量,从而将它们与业务逻辑分离。AspectJ是Java平台的一个开源项目,提供了...