静态代理

1、接口

package AOP.proxy;/*** Created by Administrator on 2019/6/11.*/
public interface PersonDao {public void savePerson();
}

2、目标实现类

package AOP.proxy;/*** Created by Administrator on 2019/6/11.*/
public class PersonDaoImpl implements PersonDao {@Overridepublic void savePerson() {System.out.println("保存成功");}
}

3、事物类

package AOP.proxy;/*** Created by Administrator on 2019/6/11.*/
public class Transaction {public void beginTransaction() {System.out.println("开启事物");}public void Commit() {System.out.println("提交事物");}
}

4、代理类

package AOP.proxy;/*** Created by Administrator on 2019/6/11.*/
public class PersonProxy implements PersonDao {private PersonDao personDao;private Transaction transaction;public PersonProxy(PersonDao personDao,Transaction transaction) {this.personDao = personDao;this.transaction=transaction;}@Overridepublic void savePerson() {/*开启事物执行目标方法事物提交* */transaction.beginTransaction();personDao.savePerson();transaction.Commit();}
}

5、单元测试

package AOP.proxy;import org.junit.Test;/*** Created by Administrator on 2019/6/11.*/
public class ProxyTest {@Testpublic void ProxyTest() {PersonDao personDao = new PersonDaoImpl();Transaction transaction= new Transaction();PersonProxy personProxy = new PersonProxy(personDao,transaction);personProxy.savePerson();}
}

6、结果
开启事物
保存成功
提交事物

7、总结
目标:操作hibernate的时候,不在每次save、update的时候,开启和提交事物。
1、静态代理模式并没有做到事物的重用
2、假如Dao层有100个类,100个proxy,接口中有多少个方法,在proxy层就要实现多少个方法,有多少个方法,就要开启和提交多个事物
3、如果一个proxy实现了多个接口,如果其中的一个借口发生变化(添加一个方法),那么proxy也要做相应的变化。

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

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

相关文章

选择大公司还是小公司

转载自 选择大公司还是小公司 本文转载自公众号 stormzhang,文中的“我”是原文作者。 前一段时间,我一知识星球的球友问我这么一个问题,说他是某 985 应届生,拿到了 BAT 一家互联网大公司的 offer,但同时他还拿到了…

未来的C#之只读引用与结构体

C中提供了const特性,使用该特性定义的参数,其所引用的参数或对象将不会被调用函数修改(当然const还提供了更多的特性,参见“Const正确性”)。在新的建议中,C#也将提供类似的特性。 只读ref参数 在C#中&am…

C++实现字符串的拼接

#include #include using namespace std; int main(){ //字符创的拼接 string a “rtmp://192.168.0.128:1935/live/Test”; string b “.flv”; a.append(b); cout<<a<<endl; string str; str.assign(a); //直接赋值 str.assign(str, 4, str.npos); //赋值给子…

表单验证

一、表单选择器&#xff1a; 用于选取某些特定的表单元素 二、常用的表单选择器&#xff1a; 1.:input,选取所有的textarea,button,input,select元素 eg:(&quot;:input&quot;).css(&quot;border&quot;,&quot;1pxsolidred&quot;);2.text选取所有的单行文…

React中BrowserRouter与HashRouter的区别

BrowserRouter与HashRouter的区别 1.底层原理不一样&#xff1a;BrowserRouter使用的是H5的history API&#xff0c;不兼容IE9及以下版本。HashRouter使用的是URL的哈希值。2.path表现形式不一样BrowserRouter的路径中没有#,例如&#xff1a;localhost:3000/demo/testHashRoute…

漫画:什么是优先队列

转载自 漫画&#xff1a;什么是优先队列 在之前的漫画中&#xff0c;我们介绍了二叉堆和堆排序。没看过的小伙伴可以看一看前文&#xff1a; 漫画&#xff1a;什么是二叉堆&#xff1f;&#xff08;修正版&#xff09; 漫画&#xff1a;什么是堆排序&#xff1f; 这一次&a…

安全——《微服务设计》读书笔记

身份认证和授权 1.单点登录&#xff08;SSO&#xff09; 当主体试图访问一个资源&#xff0c;他会被定向到一个身份提供者那里进行身份验证&#xff0c;身份提供者验明正向后会发消息给服务提供者&#xff0c;让服务提供者来决定是否允许它访问资源。 SAML和OpenID Connect/OAu…

抽象和封装

一、软件出现的目的是为了&#xff1a; 1.用计算机语言描述现实世界。 2.用计算机解决现实世界中的问题。 二、面向对象&#xff1a; 1.与人类的思维习惯一致 2.代码可重用性高&#xff0c;可靠性高。 三、从现实世界中抽象出类&#xff1a; 1.发现类 2.发现类的属性 3.发现类的…

支付对账系统怎么设计

转载自 支付对账系统怎么设计 支付对账系统是整个支付清结算体系中具体基础性意义的一个环节&#xff0c;是确保支付平台与各类第三方支付渠道数据一致性的关键系统&#xff0c;是商户资金结算、资金划拨、资金报表等逻辑准确运行的重要前提。 支付对账涉及账单下载处理、核心…

十二个 ASP.NET Core 例子

前言 在今天的博客中&#xff0c;我将介绍十几个可以在 ASP.NET Core 应用程序中使用的简单示例。从最简单的东西开始&#xff0c;比如 Options, 中间件&#xff0c;数据库&#xff0c;甚至 Nginx 或者 Docker。 首先确定你已经执行过了 dotnet restore , 然后运行 dotnet ru…

Opencv FFmpeg Ubuntu下编译问题

FFmpeg转码错误Cannot load libcuda.so.1 https://blog.csdn.net/yzhang6_10/article/details/81349532 srs2.0 安装启动 https://my.oschina.net/fengjihu/blog/413710 SRS-HLS服务的部署 https://blog.csdn.net/dengjoe/article/details/52698423 ubuntu编译ffmpeg并且demo测…

40 道基础Dubbo 面试题及答案

转载自 40 道 Dubbo 面试题及答案 想往高处走&#xff0c;怎么能不懂 Dubbo&#xff1f; Dubbo是国内最出名的分布式服务框架&#xff0c;也是 Java 程序员必备的必会的框架之一。Dubbo 更是中高级面试过程中经常会问的技术&#xff0c;无论你是否用过&#xff0c;你都必须…

康威定律和系统设计——《微服务设计》读书笔记

康威定律 任何组织在设计一套系统时&#xff0c;所交付的设计方案在结构上都与该组织的沟通结构保持一致。 ——梅尔.康威 如何理解这句话在软件工程上的含义&#xff1f;埃里克.S.雷蒙德说&#xff1a;如果你有四个小组开发一个编译器&#xff0c;那你会得到一个四步编译器。…

Ubuntu下C++代码调用可执行文件。

例如&#xff1a;已经存在一个编译好的c可执行文件&#xff1a; 简单代码&#xff08;第一个可执行文件&#xff09; vim hello.cpp #include <iostream> using namespace std; int main(){cout<<"Ubuntu调用C可执行文件成功"<<endl;return 0; }编…

Eclipse 4.9 正式发布,支持 Java 11

转载自 Eclipse 4.9 正式发布&#xff0c;支持 Java 11 来看看 Eclipse 4.9 带来了哪些新特性&#xff01; 1、外观 新增类似大纲视图的”Minimap” 间主题/暗黑主题&#xff0c;启用方法&#xff1a; Window > Show View > Other&#xff0c;然后在 Show View 对话框…

Ubuntu C++ Thread Sleep

#include #include <unistd.h> using namespace std; int main() { cout << “nitrate”; cout << flush; usleep(1000000); cout << “firtilizers”; return 0; } usleep函数能把线程挂起一段时间&#xff0c; 单位是微秒&#xff08;千分之一毫秒…

JS书写规则

1.JS严格区分大小写 2.JS中每条语句以分号(;)结尾如果不写分号&#xff0c;浏览器会自动添加&#xff0c;但是会消耗一些系统资源&#xff0c; 而且有些时候&#xff0c;浏览器会加错分号&#xff0c;所以在开发中分号必须写 3.JS中会自动忽略多个空格和换行&#xff0c;所以…