Spring——AOP练习
模仿前面的例子,完成模拟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练习的更多相关文章
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
- spring aop
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将 ...
- spring aop注解方式与xml方式配置
注解方式 applicationContext.xml 加入下面配置 <!--Spring Aop 启用自动代理注解 --> <aop:aspectj-autoproxy proxy ...
- 基于Spring AOP的JDK动态代理和CGLIB代理
一.AOP的概念 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的 ...
- Spring AOP详解
一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...
- Spring AOP实例——异常处理和记录程序执行时间
实例简介: 这个实例主要用于在一个系统的所有方法执行过程中出线异常时,把异常信息都记录下来,另外记录每个方法的执行时间. 用两个业务逻辑来说明上述功能,这两个业务逻辑首先使用Spring AOP的自动 ...
- 从零开始学 Java - Spring AOP 实现用户权限验证
每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...
- 从零开始学 Java - Spring AOP 实现主从读写分离
深刻讨论为什么要读写分离? 为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我认为都不是错误的,但也都不是完全正确的.「读写 ...
- 从零开始学 Java - Spring AOP 拦截器的基本实现
一个程序猿在梦中解决的 Bug 没有人是不做梦的,在所有梦的排行中,白日梦最令人伤感.不知道身为程序猿的大家,有没有睡了一觉,然后在梦中把睡之前代码中怎么也搞不定的 Bug 给解决的经历?反正我是有过 ...
随机推荐
- LLaMA大型语言模型
LLaMA (Large Language Model Meta AI)是Meta公司发布的大型语言模型系列,近日LLaMA种子文件被合并到了GitHub 上,同时一些项目维护者给予了批准,目前该项目 ...
- ElasticSearch之配置
ElasticSearch主要的配置文件,如下: elasticsearch.yml,ElasticSearch的相关参数. jvm.options,JVM的相关参数. log4j2.properti ...
- 基于Docker 部署 Seafile+OnlyOffice+Wiki插件
原文:基于 Docker 部署 SeafilePro + OnlyOffice(CentOS版) 官方文档:用 Docker 部署 Seafile 服务 CentOS 服务器 基于 Docker 部署 ...
- Socket.D 替代 Http 协议像 Ajax 一样开发前端接口
我们在"前端接口"开发时,使用 socket.d 协议有什么好处: 功能上可以替代 http 和原生 ws 更安全!现有的工具想抓包数据,难!难!难!(socket.d 是个新的二 ...
- C语言之检验三边能否构成三角形
要求: 编写程序检验由三边能否构成三角形,检验方法是任意两边和均要大于第三边. 输出格式:若结果可以构成,输出YES,否则输出ERROR DATA 其实很简单,运用与逻辑运算符&&判断 ...
- Java 获取Excel中的表单控件
Excel中可通过[开发工具]菜单栏下插入表单控件,如文本框.单选按钮.复选框.组合框等等,插入后的控件可执行设置控件格式,如大小.是否锁定.位置.可选文字.数据源区域.单元格链接等.当Excel中已 ...
- 5G多输入多输出技术,到底是个啥东东?
摘要:多输入多输出技术是指在发射端和接收端分别使用多个发射天线和接收天线,使信号通过发射端与接收端的多个天线传送和接收,从而改善通信质量. 本文作者|历天一 多输入多输出技术是指在发射端和接收端分别使 ...
- 聊聊游戏业务怎么用高斯Redis
摘要:其实游戏客户对数据库的诉求是很明确的,数据库应当"放心存放心用". 本文分享自华为云社区<华为云GaussDB(for Redis)揭秘第27期:聊聊游戏业务怎么用高斯 ...
- 论文解读丨CIKM'22 MARINA:An MLP-Attention Model for Multivariate Time-Series Analysis
摘要:华为云数据库创新Lab在论文<MARINA: An MLP-Attention Model for Multivariate Time-Series Analysis>中提出了华为自 ...
- ByteHouse+Apache Airflow:高效简化数据管理流程
Apache Airflow 与 ByteHouse 相结合,为管理和执行数据流程提供了强大而高效的解决方案.本文突出了使用 Apache Airflow 与 ByteHouse 的主要优势和特点,展 ...