Spring-Mybatis整合配置文件与AOP织入方式对比

这篇具有很好参考价值的文章主要介绍了Spring-Mybatis整合配置文件与AOP织入方式对比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对比AOP织入 方式一

<!-- 方式二:使用切面定义  自定义类    -->
    <bean id="diy" class="com.kuang.diy.Diy"/>
    <aop:config>
<!--     自定义切面,ref要引入的类   -->
        <aop:aspect ref="diy">
<!--         切入点   -->
            <aop:pointcut id="point" expression="execution(* com.kuang.services.ServiceImpl.*(..))"/>
<!--           通知 -->
            <aop:before method="before" pointcut-ref="point"/>
            <aop:after method="after" pointcut-ref="point"/>
        </aop:aspect>
        
    </aop:config>

 对比AOP织入 方式二

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
         https://www.springframework.org/schema/aop/spring-aop.xsd">
<!--注册bean-->
    <bean id="service" class="com.kuang.services.ServiceImpl"/>
    <bean id="logBefore" class="com.kuang.log.LogBefore"/>
    <bean id="logAfter" class="com.kuang.log.LogAfter"/>
 
<!-- 方式一:使用原生Spring API接口   -->
<!--配置AOP  :   需要导入aop约束-->
   <aop:config>
<!--   切入点  :expression表达式  = execution(需要执行的位置! 修饰符 返回值 类名.方法名.参数  (* * * * *))  -->
       <aop:pointcut id="pointcut" expression="execution(* com.kuang.services.ServiceImpl.*(..))"/>
<!--   执行环绕增加    -->
       <aop:advisor advice-ref="logBefore" pointcut-ref="pointcut"/>
       <aop:advisor advice-ref="logAfter" pointcut-ref="pointcut"/>
 
   </aop:config>
 
</beans>

 注解实现AOP

package com.qf.common;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

//增强类  事务管理类
//切面=切点加通知
@Aspect
@Component
public class TransManger {
    //定义切点,无参无返回值的方法  pc相当于切点的ID
    @Pointcut("execution(* com.qf.service..*.*(..))")
    public void pc(){}

    @Before("pc()")
    public  void startTran(){
        System.out.println("开启事务~~~~~~~~~~~~");
    }

    @AfterReturning("pc()")
    public void commitTran(){
        System.out.println("提交事务.............");
    }
   @AfterThrowing("pc()")
     public void rollBackTran(){
         System.out.println("回滚事务~~~~~~~~~~~~~~");
     }
@After("pc()")
     public void afterMethod(){
         System.out.println("测试AOP");
     }

//     加给AOP:around环绕通知
    @Around("pc()")
    public Object aroundMethod(ProceedingJoinPoint pj) throws Throwable {
        System.out.println("环绕执行前");
        long start = System.currentTimeMillis();
        Object proceed = pj.proceed();
        long end = System.currentTimeMillis();
        System.out.println(".......delete_after");
        System.out.println(end-start);
        System.out.println("环绕执行后");
        return proceed;
    }

}

spring-dao.xml 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd">
    <context:annotation-config/>
    <context:component-scan base-package="com.qf"/>

    <!-- 整合数据源属性配置文件,参数化占位符 ,读取参数${}  -->
    <context:property-placeholder location="classpath:druid.properties"/>

    <!--配置数据源,DataSource就是一个对象,将对象交由spring容器创建并管理-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${druid.driver}"/>
        <property name="url" value="${druid.url}"/>
        <property name="username" value="${druid.username}"/>
        <property name="password" value="${druid.password}"/>
    </bean>
    <!--配置SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--   配置数据源    -->
        <property name="dataSource" ref="dataSource"/>
        <!--   配置需要配置别名的实体类包  -->
        <property name="typeAliasesPackage" value="com.qf"/>
        <!--   配置mybatis映射文件加载路径,如果映射文件与接口文件不在同一路径下,需要配置 因为是在resource下所以得必须用/   -->
        <property name="mapperLocations" value="classpath:com/qf/mapper/*.xml"/>
        <!--    加载mabatis 核心配置文件,需要时加载,如果配置为空,可以省略不写    -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>

    </bean>

    <!--  配置SqlSession和接口得代理对象 -->
    <!--  bean默认是单例模式,它里面有一个私有的对象,只设置了一次 sqlSessionFactory 创建出一个sqlSessionTemplate 对象,这个对象相当于sqlSession 接口的代理对象,-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--     指定sqlSessionFactory注入 String字符串 名字,不是bean getbean是在 MapperScannerConfigurer 类内部被调用,拿这个变量去调用得
         肯定设置了openSession(true) 默认开启自动提交
          用得同一个session ,将不能使用二级缓存了,一般同个session一级缓存就够用了,一级缓存,增删改会清除缓存,但是只是查询,会找到一级缓存里之前查过的数据直接查出来,不调用sql,
          只是用同一个session 创建getMapper不同得接口代理类,去实现不同的接口,代理这个代理类。
          创建了这个代理对象注入进IOC容器里面。普通得getMapper不能创建 一个类, 他只是创建一个对象,
          然后通过动态代理这个对象去实现共同的接口的一个类,把这个类才能加入IOC容器里,返回给我们使用这个代理对象。
          -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

        <!--     设置要创建mapper对象得接口所在得包名  因为代理的是接口,所以指定包名是接口的包名,
        通过接口的字节码对象,与代理的目标对象的字节码对象,加上实现InvocationHandler的类对象,完成代理对象的创建,然后把bean创建给容器。 -->
        <property name="basePackage" value="com.qf.mapper"/>
    </bean>

    <!--配置事务管理器-->
    <bean id="transactionManger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--  注入数据源对象,要求与sqlSessionFactory创建时所注入数据源对象是同一个  -->
        <property name="dataSource" ref="dataSource"/>

    </bean>

<!--    <tx:annotation-driven transaction-manager="transactionManger"/>-->

    <tx:advice id="txAdvice" transaction-manager="transactionManger">
        <tx:attributes>
            <tx:method name="insert*"/>
            <tx:method name="delete*"/>
        </tx:attributes>
    </tx:advice>
<!--配置事务-->
    <aop:config>
        <aop:pointcut id="pc" expression="execution(* com.qf.service..*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
    </aop:config>



</beans>

导入的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.qf</groupId>
    <artifactId>Spring-Mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <spring-version>5.3.20</spring-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <!--spring相关依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <!-- spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <!--spring-aspects-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
<!--     druid   -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

文章来源地址https://www.toymoban.com/news/detail-608572.html

到了这里,关于Spring-Mybatis整合配置文件与AOP织入方式对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis与Spring整合以及AOP和PageHelper分页插件整合

    目录 前言 一、MyBatis与Spring整合的好处以及两者之间的关系 1.好处 2.关系  二、MyBatis和Spring集成 1.导入pom.xml 2.编写配置文件  3.利用mybatis逆向工程生成模型层代码 三、常用注解  四、AOP整合pageHelper分页插件 创建一个切面 测试 MyBatis是一个开源的持久层框架,而Spring是一个

    2024年02月11日
    浏览(31)
  • Spring、Spring-MVC、Mybatis、Mybatis-generator整合核心配置文件记录

    Spring、Spring-MVC、Mybatis、Mybatis-generator整合核心配置xml文件记录 spring-mybatis.xml

    2024年01月22日
    浏览(42)
  • Spring与Mybatis集成且Aop整合(放飞双手,迅速完成CRUD及分页)

    目录  一、概述 二、集成 ( 1 ) 为什么 ( 2 ) 优点 ( 3 ) 实例 三、整合 3.1 讲述 3.2 整合进行分页 带我们带来的收获 集成是指将不同的组件、系统或框架整合在一起,使它们能够协同工作,共同完成某个功能或提供某种服务。在软件开发中,集成通常指的是将多个独立的模块或

    2024年02月11日
    浏览(27)
  • MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合

    目录 前言 一、MyBatis与Spring整合的好处以及两者之间的关系 1.好处 2.关系  二、MyBatis和Spring集成 1.导入pom.xml 2.编写配置文件  3.利用mybatis逆向工程生成模型层代码 三、常用注解  四、AOP整合pageHelper分页插件 创建一个切面 测试 MyBatis是一个开源的持久层框架,而Spring是一个

    2024年02月07日
    浏览(29)
  • Spring Boot整合Mybatis配置多数据源

    在之前的事件管理系统博客中有提到动态的多数据源配置 工作中难免需要做几个工具方便自己偷懒,加上之前的挡板,数据源肯定没法单一配置,所以需要多数据源配置。这里介绍两种配置:动态数据源和固定数据源模式。这两种我在目前的工作的工具开发中都有用到。 M

    2024年01月23日
    浏览(50)
  • 【Spring教程31】SSM框架整合实战:从零开始学习SSM整合配置,如何编写Mybatis SpringMVC JDBC Spring配置类

    欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《Rest风格简介与RESTful入门》 前面我们已经把Mybatis、Spring和SpringMVC三个框架

    2024年02月04日
    浏览(52)
  • Spring5学习随笔-整合MyBatis(持久层)、连接池、Mapper文件

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 JavaEE开发需要持久层进行数据库的访问操作。 JDBC MyBatis、Hibernate进行持久开发过程存在大量的代码冗余 Spring基于模板设计模式对与上述的持

    2024年02月05日
    浏览(38)
  • 04 SpringBoot整合Druid/MyBatis/事务/AOP+打包项目

    项目结构: 引入依赖: 启动类: 实体类: Controller类: Druid配置文件application.yaml : 启动项目后进入8080/user/getUser即可获得返回的json. 先看看总体的步骤: 导入依赖:在pom.xml中添加MyBatis和数据库驱动的相关依赖。 配置数据源: application.yml 中配置 数据库连接信息,包括数据

    2024年01月21日
    浏览(26)
  • DAY02_Spring—第三方资源配置管理&Spring容器&Spring注解开发&Spring整合Mybatis和Junit

    说明:以管理DataSource连接池对象为例讲解第三方资源配置管理 问题导入 配置数据库连接参数时,注入驱动类名是用driverClassName还是driver? 1.1 管理Druid连接池 数据库准备 【第一步】添加Druid连接池依赖 注意:除了添加以上两个依赖之外,别忘了添加spring-context依赖。 【第二

    2024年02月13日
    浏览(62)
  • DAY02_Spring第三方资源配置管理&Spring容器&Spring注解开发&Spring整合Mybatis和Junit

    说明:以管理DataSource连接池对象为例讲解第三方资源配置管理 问题导入 配置数据库连接参数时,注入驱动类名是用driverClassName还是driver? 1.1 管理Druid连接池 数据库准备 【第一步】添加Druid连接池依赖 注意:除了添加以上两个依赖之外,别忘了添加spring-context依赖。 【第二

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包