`
qepwqnp
  • 浏览: 108883 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring+AspectJ采用注释做申明式事务(手工山寨版)

阅读更多

建立表

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();

}

2Spring配置文件

<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;

            }

       

        });

       

 

    }

}

分享到:
评论

相关推荐

    Spring AOP + AspectJ annotation example

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)则是其重要组成部分,它允许我们分离关注点,尤其是跨切面的系统级服务,如日志、事务管理等。AspectJ是Spring AOP支持的一种强大...

    SpringAOP+AspectJ

    虽然Spring AOP提供了方便的注解式编程,但有时我们需要更复杂的切入点表达式或者更灵活的控制,这时AspectJ就派上用场了。AspectJ是一个独立的AOP框架,它的切入点表达式更为强大,支持类型匹配、方法参数匹配等。 ...

    spring+aspectjweaver-1.7.1.jar+aspectj-1.8.9.jar+aopalliance.jar

    首先,Spring AOP是Spring框架对传统面向对象编程的补充,它主要处理那些分散在应用程序各处的横切关注点,如日志、事务管理、性能监控等。通过AOP,这些关注点可以被模块化为独立的切面,从而提高代码的可读性和可...

    spring基于AspectJ实现事务控制

    在Spring框架中,提供了多种事务管理方式,其中之一就是基于AspectJ的事务控制。本文将深入探讨如何在Spring中利用AspectJ实现事务控制。 首先,我们需要理解什么是AspectJ。AspectJ是一种面向切面编程(AOP)的...

    Spring AOP + AspectJ in XML 配置示例

    这篇博客“Spring AOP + AspectJ in XML配置示例”旨在指导开发者如何在XML配置中实现Spring AOP和AspectJ的结合。 首先,我们需要理解AOP的基本概念。AOP通过将关注点(如日志、事务管理)与业务逻辑分离,提高了...

    Android+反射+代理+静态代理+AspectJ

    【Android + 反射 + 代理 + 静态代理 + AspectJ】 面向切面编程(AOP)是一种编程范式,与面向对象编程(OOP)相对,它旨在将关注点分离,使得通用功能(如日志记录、事务管理等)可以从核心业务逻辑中解耦。AOP 的...

    spring aspectj.jar

    《Spring AOP与AspectJ深度解析》 在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱。其中,Spring的面向切面编程(AOP)特性极大地简化了代码的维护和扩展。AspectJ是Spring AOP的重要组成部分,...

    spring+springmvc+mybatis等架包

    `aspectjweaver-1.6.9.jar`是AspectJ的编译器和运行时库,AspectJ是一种强大的面向切面编程(AOP)框架,可以将关注点(如日志、事务管理)与核心业务逻辑分离。 `mysql-connector-java-5.1.0-bin.jar`是MySQL...

    maven+spring+springMVC+mybatis

    maven+spring+springMVC+mybatis 框架搭建 Maven 是一个优秀的项目管理和构建工具,Spring 是一个广泛使用的 Java 框架,SpringMVC 是基于 Spring 的一个 Web 框架,MyBatis 是一个持久层框架。在这个项目中,我们...

    springmvc+spring+mybatis

    ### SpringMVC + Spring + MyBatis 整合配置详解 #### 一、技术栈介绍与选择 在本文档中,我们将详细介绍如何整合SpringMVC、Spring和MyBatis这三大框架来构建一个简单的Web应用。这三个框架在Java Web开发领域内...

    spring+springMVC所需的包

    10. **spring-aop-4.2.5.RELEASE.jar**:Spring AOP模块提供了面向切面编程的支持,与AspectJ Weaver结合使用,可以实现声明式事务管理、缓存、性能监控等功能。 通过这些库,开发者可以构建一个完整的Spring + ...

    开发者突击 精通AOP整合应用开发AspectWerkz+AspectJ+Spring.zip

    本书以AOP基础理论为主线,首先讲解AOP的产生与发展、为什么要应用AOP、AOP的核心概念,然后详细讲解AspectWerkz、AspectJ、Spring框架的AOP应用开发技术。 随书附赠的光盘内容为本书开发的案例程序包。本书内容循序...

    开发者突击 精通AOP整合应用开发AspectWerkz+AspectJ+Spring.z01

    本书以AOP基础理论为主线,首先讲解AOP的产生与发展、为什么要应用AOP、AOP的核心概念,然后详细讲解AspectWerkz、AspectJ、Spring框架的AOP应用开发技术。 随书附赠的光盘内容为本书开发的案例程序包。本书内容循序...

    Realm + aspectj aop数据库封装

    这些操作可以利用AOP进行增强,如事务处理、错误处理、性能统计等。 5. **安全性考虑**:使用AOP确保 Realm 对象的正确关闭,防止内存泄漏。 Realm 对象如果不正确关闭,可能会持续占用内存,影响应用性能。 6. **...

    spring + hibernate 开发需要 jar包

    4. **aspectjweaver-1.6.10.jar**:AspectJ是AOP(面向切面编程)的实现,Spring框架利用它进行声明式事务管理和其他横切关注点,如日志、性能监控等。 5. **jackson-all-1.8.2.jar**:Jackson是一个流行的JSON处理...

    spring+springmvc+hibernate+redis 需要的jar包

    标题中的"spring+springmvc+hibernate+redis 需要的jar包"指的是一套基于Java的Web开发框架组合,其中包含了Spring、SpringMVC、Hibernate和Redis四个关键组件。这些技术通常用于构建高效、可扩展的后端应用。 ...

    spring和aspectj的aop实验

    标题"spring和aspectj的aop实验"表明我们将探讨如何在Spring中使用AspectJ进行AOP实践。这通常涉及到创建切面、定义通知、配置织入策略以及测试其效果。 1. **什么是AOP** AOP的核心概念是切面(Aspect),它封装...

    AspectJ in Action: Enterprise AOP with Spring Applications

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

    Spring 使用AspectJ 实现 AOP之前置通知小例子

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者定义“切面”,这些切面封装了关注点,如日志、事务管理或性能度量,从而将它们与业务逻辑分离。AspectJ是Java平台的一个开源项目,提供了...

Global site tag (gtag.js) - Google Analytics