搭建面向切面编程项目

news2024/12/26 11:30:10

此项目在整合Mybatis基础上修改,可参考主页的整合Mybatis文章

注解版本

第一步

引入maven坐标

<!--     切面编程所需jar包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.7</version>
        </dependency>
第二步

修改spring核心配置文件的文件头内容并且开启切面组件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--开启注解-->
    <context:annotation-config/>
    <!--组件扫描-->
    <context:component-scan base-package="com.xszx"></context:component-scan>
    <!--开启切面-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    <!--  配置数据源  -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql:///sjt2405"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
    <!--创建sqlSessionFactory对象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源对象-->
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="mybatis-config.xml"></property>
    </bean>
    <!--创建sqlSessionTemplate对象-->
<!--    需要配置Spring专属的SqlSession,以便与当作参数传递给其他的类使用-->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
    </bean>

</beans>
第三步

新建切面层及切面的类,并且在类中标识@Aspect注解表明该类为切面类

 第四步

测试,目前已经搭建完成,只需在主方法中进行测试即可。

 XML版本

第一步

引入maven坐标

<!--     切面编程所需jar包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.7</version>
        </dependency>
第二步

创建切面测试类,无需配注解

@Component

public class aopTest {

    public void before(){
        System.out.println("我是前置通知");
    }

}
第三步

配置beans.xml文件

<!-- 配置 aop -->
<aop:config>
    <!-- 配置切入点表达式 -->
    <aop:pointcut expression="execution(* com.xszx.service.*.*(..))"
                  id="pt1"/>
    <!--  建立事务的通知和切入点表达式的关系 -->
    <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/>
</aop:config>
<!-- 事务的配置 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!--配置事务的属性 -->
    <tx:attributes>
        <!-- 指定方法名称:是业务核心方法
        read-only:是否是只读事务。默认 false,不只读。
        isolation:指定事务的隔离级别。默认值是使用数据库的默认隔离级别。
        propagation:指定事务的传播行为。
        timeout:指定超时时间。默认值为: -1。永不超时。
        rollback-for:用于指定一个异常,当执行产生该异常时,事务回滚。产生其他异常,事务不回滚。
        没有默认值,任何异常都回滚。
        no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时,事务回
        滚。没有默认值,任何异常都回滚。
        -->
        <tx:method name="addUser"  propagation="REQUIRED"/>
        <tx:method name="changeSal"  propagation="SUPPORTS" rollback-for="FileNotFoundException"/>
    </tx:attributes>
</tx:advice>
第四步

测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chapter 04 Vue指令(下)

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、指令修饰符二、v-bind对于样式操作的增强三、v-model应用于表单元素 前言 在 Vue.js 中&#xff0c;指令是带有 v- 前缀的特殊属性&#xff0c;不同属性对应不同的功…

[原理理解] Swin Transformer相对位置编码理解

文章目录 简述相对位置编码的意义直观理解注意力相对位置获取必要性当前位置初步获取利用广播机制获取相对位置索引XY获取最后相对位置1获取最后相对位置2最终的相对位置值嵌入 简述 在看Swin Transformer的时候&#xff0c;一开始在相对位置编码这一块的理解上卡壳了挺久&…

27 Combobox组件

Tkinter ttk.Combobox 组件使用指南 ttk.Combobox 是 Tkinter 的一个高级控件&#xff0c;它结合了文本框和下拉列表的功能&#xff0c;允许用户从预定义的选项列表中选择一个值。ttk 模块是 Tkinter 的一个扩展&#xff0c;提供了更现代的控件外观和行为。以下是对 ttk.Combo…

hyperf json-rpc

安装 安装docker hyperf 安装 hyperf-rpc-server-v8 &#xff08;服务端&#xff09; docker run --name hyperf-rpc-server-v8 \ -v /www/docker/hyperf-rpc-server:/data/project \ -w /data/project \ -p 9508:9501 -it \ --privileged -u root \ --entrypoint /bin/sh \…

港口行业大数据BI建设方案(24页PPT)

方案简介&#xff1a; 港口行业BI建设方案旨在通过数据整合、分析、可视化及智能化决策支持等手段&#xff0c;提升港口运营效率与管理水平。它的建设实施有利推动港口数字化转型、是提升竞争力的关键举措。通过构建高效、智能的BI系统&#xff0c;港口企业能够实现对运营数据…

软设例题—哈夫曼树

哈夫曼树基本概念&#xff1a; 叶子结点的路径长度&#xff1a;结点到根的分支数量 树的路径长度&#xff1a;所有叶子结点路径长度之和 权&#xff1a;叶子结点的数值 叶子结点的带权路径长度&#xff1a;权重*路径 树的带权路径长度&#xff1a;所有叶子结点带权路径之和…

# Windows 系统安装 virtualbox/vmware 虚拟机教程

Windows 系统安装 virtualbox/vmware虚拟机教程 段子手-168 2024-8-28 一、virtualbox/vmware 简介 1、VirtualBox VirtualBox 是开源的、免费虚拟机软件。VirtualBox 是由德国 Innotek 公司开发&#xff0c;由 Sun Microsystems 公司出品的软件&#xff0c;号称是最强的免…

前端学习笔记-Web APIs篇-01

变量声明 变量声明有三个 var let 和 const 建议&#xff1a; const 优先&#xff0c;尽量使用const&#xff0c; 原因是&#xff1a; const 语义化更好很多变量我们声明的时候就知道他不会被更改了&#xff0c;那为什么不用 const呢&#xff1f;实际开发中也是&#xff0c…

如何使用ssm实现基于ssm的软考系统+vue

TOC ssm321基于ssm的软考系统vue 系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#x…

11 索引

目录 没有索引&#xff0c;可能会有什么问题认识磁盘 1. 没有索引&#xff0c;可能会有什么问题 所以&#xff1a;提高数据库的性能&#xff0c;索引是物美价廉的东西。不用加内存&#xff0c;不用改程序&#xff0c;不用调sql&#xff0c;只要执行正确的create index&#x…

Python 数据分析笔记— Numpy 基本操作

文章目录 学习内容&#xff1a;一、什么是数组、矩阵二、创建与访问数组三、矩阵基本操作 学习内容&#xff1a; 一、什么是数组、矩阵 数组&#xff08;Array&#xff09;&#xff1a;是有序的元素序列&#xff0c;可以是一维、二维、多维。 array1 [1,2,3] 或[a, b, c, d…

Littorine生物合成糖基转移酶和酰基转移酶-文献精读39

Functional genomics analysis reveals two novel genes required for littorine biosynthesis 功能基因组学分析揭示了两个Littorine生物合成所需的新基因&#xff0c;基因组挖掘很有效果~ 摘要 一些茄科药用植物能够生产药用莨菪烷类生物碱&#xff08;TAs&#xff09;&am…

MYSQL:简述对B树和B+树的认识

MySQL的索引使用B树结构。 1、B树 在说B树之前&#xff0c;先说说B树&#xff0c;B树是一个多路平衡查找树&#xff0c;相较于普通的二叉树&#xff0c;不会发生极度不平衡的状况&#xff0c;同时也是多路的。 B树的特点是&#xff1a;他会将数据也保存在非叶子节点。而这个…

样本存储需要注意的事项

在实验室和研究机构中&#xff0c;有一些样本是非常重要且需要特殊保护的&#xff0c;这些样本可能包括珍贵的细胞培养物、生物医学样本、药物试剂等等&#xff0c;为了保证这些样本的质量和完整性&#xff0c;采取一些特殊的措施来进行存储管理非常重要。 一旦这些珍贵样本出…

Undertow 性能、配置

一、性能对比 Tomcat vs Jetty vs Undertow性能对比,详细文章: Tomcat vs Jetty vs Undertow性能对比-腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1699803压测指标的结果: 吞吐量:Undertow > Jetty > Tomcat响应时间&…

World of Warcraft [CLASSIC][80][Shushia] Call to Arms: Alterac Valley

Alterac Valley 奥特兰克山谷 明明能拿7000-9000荣誉&#xff0c;白送的大战场&#xff0c;废材太多&#xff0c;看不下去了&#xff0c;动不动就杀女人&#xff0c;丢墓地&#xff0c;最终拿什么3000荣誉&#xff0c;也不知道脑子装啥。 我们55级的时候就能把联盟打的不要不要…

物料类型 UNBW 和 NLAG

业务示例 公司的广告部门负责采购广告业务并承担相应的费用。这些宣传册不应该存储在广告部门&#xff1b;而应该存储在物料仓库中。并且需要基于数量而不是金额进行库存管理。因此这些物料的物料类型为未评估物料(UNBW)。 物料类型 UNBW 物料类型UNBW表示未评估物料。可以通…

第20讲 动画讲解轻松学会STM32的PWM

来源&#xff1a;【STM32】动画讲解轻松学会STM32的PWM_哔哩哔哩_bilibili 基本概念 周期/频率 计算公式&#xff1a;PWM周期1个高电平用时1个低电平用时 PWM的频率1/周期 如图所示此时周期为1ms&#xff0c;即1s内存在1000组这样的高低电平&#xff0c;PWM的频率为1000hz。…

selenium启动总报错 WebDriverManager总是异常

我的环境用这个自动管理驱动的工具 WebDriverManager 总是报错 尝试过很多方法都没有&#xff0c;只好手动指定浏览器的位置 System.setProperty("webdriver.chrome.driver", "C:\\Users\\27224\\.cache\\selenium\\chromedriver\\win64\\128.0.6613.84\\chrome…

030集—CAD 实现钟表时针动态转动效果——vba代码实现

cad图中显示动图案例如下&#xff1a; 部分代码如下&#xff1a; &#xff08;按下Esc键可退出&#xff09; #If VBA7 Then 64位系统声明Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else 32位系统声明Declare Sub Sleep Lib "k…