模仿前面的例子,完成模拟JDBC操作

1.UserDAO接口,具有insert(String name)方法,UserDAOImpl实现它
2. 用前置增强,在插入之前,完成数据库连接、事务创建工作
3.用后置增强,在插入之后,完成事务提交,数据库连接关闭操作
3. 用环绕增强,显示提示信息,前后分别为“用户等待插入”, “用户插入操作完成

首先我们编写一个UserDao接口,这个接口中拥有insert(String name)方法,UserDaoImpl实现它

public interface UserDAO {
void insert(String name);
}
public class UserDaoImpl implements UserDAO{
@Override
public void insert(String name) {
System.out.println(name + "添加成功。。。。。。。");
}
}

创建一个自己的增强类

/**
* 增强类
*/
public class Advice { //用前置增强,在插入之前,完成数据库连接、事务创建工作
public void before(){
System.out.println("数据库的连接");
System.out.println("事务创建成功");
} //用后置增强,在插入之后,完成事务提交,数据库连接关闭操作
public void after(){
System.out.println("事务提交");
System.out.println("数据库连接关闭");
} //用环绕增强,显示提示信息,前后分别为“**用户等待插入**”, “**用户插入操作完成**”
public void around(ProceedingJoinPoint pt) throws Throwable {
//方法之前
System.out.println("用户等待插入");
//执行被增强的方法
pt.proceed(); //方法之后
System.out.println("用户插入操作完成");
}
}

配置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: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 http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here --> <!-- 1配置对象 --> <bean id="userDaoImpl" class="com.pp.dao.UserDaoImpl"/>
<bean id="Advice" class="com.pp.service.Advice"/>
<!-- 2配置aop的操作 -->
<aop:config>
<!-- 2.1配置切入点被增强类-->
<aop:pointcut id="pointcut1" expression="execution(* com.pp.dao.UserDaoImpl.*(..))" />
<!-- 2.2配置切面 把增强用到方法上面 -->
<aop:aspect ref="Advice">
<!-- 配置增强类
method: 增强类里面使用哪个方法作为前置
pointcut-ref 把before1增强要用到哪个切入点上-->
<aop:before method="before" pointcut-ref="pointcut1"/>
<aop:after-returning method="after" pointcut-ref="pointcut1"/>
<aop:around method="around" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config>
</beans>

编写测试类

    @Test
public void test_springAop(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans_03.xml");
UserDAO userDaoImpl = context.getBean("userDaoImpl", UserDAO.class);
userDaoImpl.insert("盼盼");
}

Spring——AOP练习的更多相关文章

  1. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  2. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  3. spring aop

    什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将 ...

  4. spring aop注解方式与xml方式配置

    注解方式 applicationContext.xml 加入下面配置 <!--Spring Aop 启用自动代理注解 --> <aop:aspectj-autoproxy proxy ...

  5. 基于Spring AOP的JDK动态代理和CGLIB代理

    一.AOP的概念  在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的 ...

  6. Spring AOP详解

    一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...

  7. Spring AOP实例——异常处理和记录程序执行时间

    实例简介: 这个实例主要用于在一个系统的所有方法执行过程中出线异常时,把异常信息都记录下来,另外记录每个方法的执行时间. 用两个业务逻辑来说明上述功能,这两个业务逻辑首先使用Spring AOP的自动 ...

  8. 从零开始学 Java - Spring AOP 实现用户权限验证

    每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...

  9. 从零开始学 Java - Spring AOP 实现主从读写分离

    深刻讨论为什么要读写分离? 为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我认为都不是错误的,但也都不是完全正确的.「读写 ...

  10. 从零开始学 Java - Spring AOP 拦截器的基本实现

    一个程序猿在梦中解决的 Bug 没有人是不做梦的,在所有梦的排行中,白日梦最令人伤感.不知道身为程序猿的大家,有没有睡了一觉,然后在梦中把睡之前代码中怎么也搞不定的 Bug 给解决的经历?反正我是有过 ...

随机推荐

  1. Elasticsearch对接MinIO存储Snapshot快照

    服务器配置 MinIO集群节点(4节点) IP 节点1 miniotest1.ip.tp-link.com 172.29.145.80 生产环境需要增加一个Nginx负载均衡前端用于ELK对接,此处直 ...

  2. 使用Java 17中的record替代Lombok的部分功能

    在DD长期更新的Java新特性专栏中,已经介绍过Java 16中开始支持的新特性:record的使用. 之前只是做了介绍,但没有结合之前的编码习惯或规范来聊聊未来的应用变化.最近正好因为互相revie ...

  3. JavaScript this 绑定详解

    函数内 this 绑定 函数内this的绑定和函数定义的位置没有关系,和调用的方式和调用位置有关系,函数内的this是在被调用执行时被绑定的. this的具体绑定规则 this 绑定基本包含下面4种绑 ...

  4. GaussDB(for Redis)新特性发布:前缀搜索千倍提升与集群版多租隔离

    摘要:GaussDB(for Redis)推出的全新特性,实现集群版多租隔离功能和增强版前缀搜索,前缀搜索时延较开源Redis降低千倍,为助力企业业务发展带来了更多可能. 近期,华为云GaussDB( ...

  5. 火山引擎DataTester:无需研发人力,即刻开启企业A/B实验

    近日,火山引擎A/B测试平台-- DataTester 对产品内A/B实验的"可视化编辑器"进行了新的升级,对交互.预览.Xpath的层次结构视图等能力均做了优化.   据介绍,火 ...

  6. Java 网络编程 —— 实现非阻塞式的客户端

    创建阻塞的 EchoClient 客户程序一般不需要同时建立与服务器的多个连接,因此用一个线程,按照阻塞模式运行就能满足需求 public class EchoClient { private Soc ...

  7. 透析阿里云视频云「低代码音视频工厂」之能量引擎——vPaaS 视频原生应用开发平台

    为满足企业用户极速搭建高品质专属音视频业务的需求,阿里云视频云的"低代码音视频工厂"应运而生,但极速而高品质的平台搭建诉求,需要用全新的开发方式才能真正实现,而全新的开发方式背后蕴 ...

  8. SpringBoot 项目实战 | 瑞吉外卖 Day06

    该系列将记录一份完整的实战项目的完成过程,该篇属于第六天 案例来自B站黑马程序员Java项目实战<瑞吉外卖>,请结合课程资料阅读以下内容 该篇我们将完成以下内容: 用户地址簿相关功能 菜品 ...

  9. MAVEN 配置和基本使用

    Maven 安装配置 解压 apache-maven-3.6.1.rar 既安装完成 配置环境变量 MAVEN_HOME 为安装路径的 bin 目录 在 Path 下添加 %MAVEN_HOME%\b ...

  10. 活动回顾|阿里云 Serverless 技术实践营 Serverless +AI 专场

    8月25日"阿里云Serverless技术实践营( Serverless + AI 专场)"北京站圆满落幕.活动受众以关注 Serverless +AI 技术的开发者.企业决策人. ...