返回顶部
首页 > 资讯 > 后端开发 > Python >Java_Spring之基于注解的AOP配置
  • 275
分享到

Java_Spring之基于注解的AOP配置

JavaSpring注解的AOP配置SpringAOP配置基于注解的AOP配置 2023-05-14 14:05:49 275人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1 环境搭建1.1 第一步:准备必要的代码和 jar 包1.2 第二步:在配置文件中导入 context 的名称空间1.3 第三步:把资源使用注解配置 1.4 第四步:

1 环境搭建

1.1 第一步:准备必要的代码和 jar 包

  • 拷贝上一小节的工程即可。

1.2 第二步:在配置文件中导入 context 的名称空间

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="Http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
 
    <!-- 配置数据库操作对象 -->
    <bean id="dbAssit" class="com.itheima.dbassit.DBAssit">
        <property name="dataSource" ref="dataSource"></property>
        
        <!-- 指定 connection 和线程绑定 -->
        <property name="useCurrentConnection" value="true"></property>
    </bean>
 
    <!-- 配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.Mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql:///spring_day02"></property>
        <property name="user" value="root"></property>
        <property name="passWord" value="1234"></property>
    </bean>
</beans>

1.3 第三步:把资源使用注解配置

  • 账户的业务层实现类
@Service("accountService")
public class AccountServiceImpl implements IAccountService {
 
    @Autowired
    private IAccountDao accountDao;
}
  • 账户的持久层实现类
@Repository("accountDao")
public class AccountDaoImpl implements IAccountDao {
    @Autowired
    private DBAssit dbAssit ;
}

 1.4 第四步:在配置文件中指定 spring 要扫描的包

<!-- 告知 spring,在创建容器时要扫描的包 -->
<context:component-scan base-package="com.itheima"></context:component-scan>

2 配置步骤

2.1 第一步:把通知类也使用注解配置

@Component("txManager")
public class TransactionManager {
 
    //定义一个 DBAssit
    @Autowired
    private DBAssit dbAssit ;
}

2.2 第二步:在通知类上使用@Aspect 注解声明为切面

  • 作用:
    • 把当前类声明为切面类。
  • 事务控制类
@Component("txManager")
@Aspect//表明当前类是一个切面类
public class TransactionManager {
 
    //定义一个 DBAssit
    @Autowired
    private DBAssit dbAssit ;
}

2.3 第三步:在增强的方法上使用注解配置通知

2.3.1 @Before

  • 作用:
    • 把当前方法看成是前置通知。
  • 属性:
    • value:用于指定切入点表达式,还可以指定切入点表达式的引用。
//开启事务
@Before("execution(* com.itheima.service.impl.*.*(..))")
public void beginTransaction() {
 
    try {
        dbAssit.getCurrentConnection().setAutoCommit(false);
    } catch (sqlException e) {
        e.printStackTrace();
    }
}

2.3.2 @AfterReturning

  • 作用:
    • 把当前方法看成是后置通知。
  • 属性:
    • value:用于指定切入点表达式,还可以指定切入点表达式的引用
//提交事务
@AfterReturning("execution(* com.itheima.service.impl.*.*(..))")
public void commit() {
 
    try {
        dbAssit.getCurrentConnection().commit();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

2.3.3 @AfterThrowing

  • 作用:
    • 把当前方法看成是异常通知。
  • 属性:
    • value:用于指定切入点表达式,还可以指定切入点表达式的引用
//回滚事务
@AfterThrowing("execution(* com.itheima.service.impl.*.*(..))")
public void rollback() {
 
    try {
        dbAssit.getCurrentConnection().rollback();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

2.3.4 @After

  • 作用:
    • 把当前方法看成是最终通知。
  • 属性:
    • value:用于指定切入点表达式,还可以指定切入点表达式的引用
//释放资源
@After("execution(* com.itheima.service.impl.*.*(..))")
public void release() {
 
    try {
        dbAssit.releaseConnection();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2.4 第四步:在 spring 配置文件中开启 spring 对注解 AOP 的支持

<!-- 开启 spring 对注解 AOP 的支持 -->
<aop:aspectj-autoproxy/>

3 环绕通知注解配置 @Around

  • 作用:
    • 把当前方法看成是环绕通知。
  • 属性:
    • value:用于指定切入点表达式,还可以指定切入点表达式的引用。

@Around("execution(* com.itheima.service.impl.*.*(..))")
public Object transactionAround(ProceedingJoinPoint pjp) {
 
    //定义返回值
    Object rtValue = null;
 
    try {
    
        //获取方法执行所需的参数
        Object[] args = pjp.getArgs();
    
        //前置通知:开启事务
        beginTransaction();
 
        //执行方法
        rtValue = pjp.proceed(args);
 
        //后置通知:提交事务
        commit();
        }catch(Throwable e) {
 
        //异常通知:回滚事务
        rollback();
        e.printStackTrace();
    }finally {
 
    //最终通知:释放资源
    release();
    }
 
    return rtValue;
}

4 切入点表达式注解 @Pointcut

  • 作用:
    • 指定切入点表达式
  • 属性:
    • value:指定表达式的内容
@Pointcut("execution(* com.itheima.service.impl.*.*(..))")
private void pt1() {}
 
    
    @Around("pt1()")//注意:千万别忘了写括号
    public Object transactionAround(ProceedingJoinPoint pjp) {
 
    //定义返回值
    Object rtValue = null;
 
    try {
        //获取方法执行所需的参数
        Object[] args = pjp.getArgs();
 
        //前置通知:开启事务
        beginTransaction();
        
        //执行方法
        rtValue = pjp.proceed(args);
 
        //后置通知:提交事务
        commit();
    }catch(Throwable e) {
 
        //异常通知:回滚事务
        rollback();
        e.printStackTrace();
    }finally {
 
        //最终通知:释放资源
        release();
    }
    
    return rtValue;
}

5 不使用 XML 的配置方式

@Configuration
@ComponentScan(basePackages="com.itheima")
@EnableAspectJAutoProxy
public class SprinGConfiguration {
 
}

到此这篇关于Java_Spring之基于注解的 AOP 配置的文章就介绍到这了,更多相关Java Spring AOP配置内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java_Spring之基于注解的AOP配置

本文链接: https://lsjlt.com/news/203208.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java_Spring之基于注解的AOP配置
    目录1 环境搭建1.1 第一步:准备必要的代码和 jar 包1.2 第二步:在配置文件中导入 context 的名称空间1.3 第三步:把资源使用注解配置 1.4 第四步:...
    99+
    2023-05-14
    Java Spring 注解的AOP配置 Spring AOP配置 基于注解的 AOP配置
  • Java_Spring之XML 的 AOP 配置
    目录1 环境搭建1.1 第一步:准备必要的代码1.2 第二步:拷贝必备的 jar 包到工程的 lib 目录1.3 第三步:创建 spring 的配置文件并导入约束1.4 第四步:配置...
    99+
    2023-05-14
    Java Spring基于XML的AOP注解 Spring基于XML的AOP注解 基于XML的AOP注解
  • Java Spring之基于注解的AOP怎么配置
    本篇内容主要讲解“Java Spring之基于注解的AOP怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Spring之基于注解的AOP怎么配置”吧!1 环境搭建1.1 第一步:...
    99+
    2023-07-05
  • 浅析Spring基于注解的AOP
    目录一、准备工作二、基于注解的AOP之前置通知三、基于注解的AOP之切入点表达式的语法和重用以及获取连接点的信息①切入点表达式的语法②获取连接点的信息③重用写入点表达式一、准备工作 ...
    99+
    2022-11-13
    Spring AOP Spring基于注解的AOP
  • Spring3基于注释驱动的AOP
    51CTO正在组织十佳博客评选请 Spring3基于注释驱动的AOP 实在是郁闷刚刚编辑了一篇文章,由于字数的原因,没发布成功,好我就分开写吧,今天向大家介绍的是Spring基于注释驱动的AOP,其实估计这已经不是什么新技术了,但是我争取写...
    99+
    2023-01-31
    注释 AOP
  • Spring基于注解配置事务的属性
    本文实例为大家分享了Spring基于注解配置事务的属性,供大家参考,具体内容如下 一、事务属性概述 在Spring中,事务属性描述了事务策略如何应用到方法上,事务属性包含5个方面: ...
    99+
    2024-04-02
  • aspectjweaver:关于Spring注解AOP的注意点
    在使用Spring注解AOP时,有以下几个注意点:1. 引入相应的依赖:在使用Spring注解AOP时,需要引入aspectjwea...
    99+
    2023-09-13
    Spring
  • 使用Spring Aop如何配置AspectJ注解
    这篇文章将为大家详细讲解有关使用Spring Aop如何配置AspectJ注解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。采用的jdk代理,接口和实现类代码请参考上篇博文。主要是将Aspe...
    99+
    2023-05-31
    springaop aspectj
  • spring boot基于注解的声明式事务配置详解
    事务配置 1、配置方式一 1)开启spring事务管理,在spring boot启动类添加注解@EnableTransactionManagement(proxyTargetClas...
    99+
    2024-04-02
  • Elam的caffe笔记之配置篇:基于
    作为一个完完全全的linux小白,平时连cmd打开文件夹都要百度的人,面对单独配置caffe这个棘手任务,第一反应就是搜教程。搜索之后发现现在网上绝大多数的caffe配置教程都不是针对Centos6.5且python3.6的,还是硬着头...
    99+
    2023-01-31
    笔记 Elam caffe
  • Java Spring之XML的AOP怎么配置
    本篇内容主要讲解“Java Spring之XML的AOP怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Spring之XML的AOP怎么配置”吧!1 环境搭建示例:在学习 spr...
    99+
    2023-07-05
  • SpringBoot学习之基于注解的缓存
    目录主要使用到的注解:使用步骤注解属性介绍@Cacheable() 的属性值及释义:@CachPut属性值及释义:@CachEvict属性值及释义:@Caching总结主要使用到的注...
    99+
    2024-04-02
  • Spring框架基于注解的AOP之各种通知的使用与环绕通知实现详解
    目录一、基于注解的AOP之各种通知的使用二、基于注解的AOP之环绕通知一、基于注解的AOP之各种通知的使用 1.在切面中,需要通过指定的注解将方法标识为通知方法 @Before:前置...
    99+
    2022-11-13
    Spring框架基于注解的AOP各种通知 Spring框架基于注解的AOP环绕通知
  • spring基于注解配置实现事务控制操作
    目录spring注解配置实现事务控制1、导入相关依赖2、创建spring配置类3、创建JdbcConfig数据源配置类4、创建TransactionConfig事务配置类5、创建jd...
    99+
    2024-04-02
  • 详解基于Vue+Koa的pm2配置
    目前使用的技术栈是:前端Vue、后端Koa、数据库Mongodb。 然而每当起服务的时候,都要 npm start 、 node ./server/app.js ,还要同时保持这两个窗口一直是开着的,很是麻...
    99+
    2022-06-04
    详解 Vue Koa
  • iSCSI之基于用户的认证及基于配置文件创建iSCSI
    承接上文 ->http://11107124.blog.51cto.com/11097124/1884645 被之前discovery的target信息会保存在此(discovery 的数据...
    99+
    2024-04-02
  • Spring基于AspectJ的AOP开发案例解析
    目录AspectJ简介注解开发环境准备不同的通知类型最通知中通过value属性定义切点入门案列@Before前置通知@AfterReturning后置通知@Around环绕通知@Af...
    99+
    2024-04-02
  • 基于spring中的aop简单实例讲解
    aop,即面向切面编程,面向切面编程的目标就是分离关注点,比如:一个骑士只需要关注守护安全,或者远征,而骑士辉煌一生的事迹由谁来记录和歌颂呢,当然不会是自己了,这个完全可以由诗人去歌颂,比如当骑士出征的时候诗人可以去欢送,当骑士英勇牺牲的时...
    99+
    2023-05-31
    spring aop 实例
  • Spring的注解配置与XML配置之间的比较
    注释配置相对于 XML 配置具有很多的优势:它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时,我们就不需要...
    99+
    2022-11-15
    spring 注解配置 XML配置
  • 基于springboot activiti 配置项解析
    目录springboot activiti 配置项asyncExecutorEnabled属性设置asyncExecutorActivate校验流程文件使用自定义mybatis-ma...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作