详细了解MVC+proxy


Posted in Java/Android onJuly 09, 2021
目录
  • 1、创建业务层UserService接口定义需要完成的功能
  • 2、创建持久层UserDao接口定义具体的CURD
  • 3、完成UserService接口和UserDao的实现类
  • 4、创建InvocationHandler接口的实现类
  • 5、创建表示层Servlet去完成调用
  • 总结

 

1、创建业务层UserService接口定义需要完成的功能

/**
 * 创建目标接口,定义目标接口要完成的功能
 */
public interface UserService {
    boolean save(User user);
}

 

2、创建持久层UserDao接口定义具体的CURD

/**
 * 创建目标接口,定义目标接口要完成的功能
 */
public interface UserService {
    boolean save(User user);
}

 

3、完成UserService接口和UserDao的实现类

public class UserServiceImpl implements UserService {
    private UserDao dao=new UserDaoImpl();
    @Override
    public boolean save(User user) {
        boolean success=false;
        success=dao.insert(user);
        return success;
    }
}

这里省略具体的JDBC代码

public class UserDaoImpl implements UserDao {
    @Override
    public boolean insert(User user) {
        System.out.println("insert into t_user (username,password)values('"+user.getUsername()+"','"+user.getPassword()+"')");
        return true;
    }
}

 

4、创建InvocationHandler接口的实现类

为什么需要这个接口?

因为在开发中,业务层可能含有涉及到多步数据库操作,所以这一步需要开启事务,但是开发中这样的情况太多了,所以我们需要面向横切面编程,创建代理代理,在调用业务层方法时,我们利用jdk动态代理的增强功能提供事务。这样,事务代码只用写一次,但是每次业务层方法调用时,我们都可以使用代理对象去调用业务层方法来开启事务。实现了代码复用。

public class UserHandler implements InvocationHandler {

    //动态创建目标对象
    Object target=null;
    public UserHandler(Object target){
        this.target=target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //返回值
        Object result=null;
        //增强功能
        System.out.println("begin Transaction.....");
        result=result=method.invoke(target,args);
        System.out.println("commit Transaction.....");
        System.out.println("rollback Transaction.....");
        System.out.println("end Transaction.....");
        //返回值
        return result;
    }
}

这里我就用输出语句代表事务语句。

 

5、创建表示层Servlet去完成调用

public class UserSaveServlet {
    public static void main(String[] args) throws Exception {
        //需要调用的目标类
        Class c= UserServiceImpl.class;
        Object obj = c.newInstance();
        //获取该类的类加载器
        ClassLoader loader = obj.getClass().getClassLoader();
        //目标对象实现的接口
        Class<?>[] interfaces=obj.getClass().getInterfaces();
        //获取InvocationHandler对象
        InvocationHandler handler=new UserHandler(obj);
        //创建代理对象
        //将返回值转为接口类型
        UserService service=(UserService)Proxy.newProxyInstance(loader,interfaces,handler);
        boolean success=service.save(new User("张三","123456"));
        System.out.println(success?"保存成功":"保存失败");
    }
}

详细了解MVC+proxy

 

总结

本篇文章就到这里了,希望能够帮助到你,也希望您能够多多关注三水点靠木的更多内容!

Java/Android 相关文章推荐
深入理解java.lang.String类的不可变性
Jun 27 Java/Android
Spring中bean的生命周期之getSingleton方法
Jun 30 Java/Android
在Spring-Boot中如何使用@Value注解注入集合类
Aug 02 Java/Android
springboot中rabbitmq实现消息可靠性机制详解
Sep 25 Java/Android
JAVA API 实用类 String详解
Oct 05 Java/Android
深入解读Java三大集合之map list set的用法
Nov 11 Java/Android
Netty分布式客户端接入流程初始化源码分析
Mar 25 Java/Android
Spring Data JPA框架Repository自定义实现
Apr 28 Java/Android
Java中生成微信小程序太阳码的实现方案
Jun 01 Java/Android
Spring中的@Transactional的工作原理
Jun 05 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 21 Java/Android
SpringBoot Http远程调用的方法
Aug 14 Java/Android
Spring实现内置监听器
Jul 09 #Java/Android
新手初学Java网络编程
Jul 07 #Java/Android
Java 语言中Object 类和System 类详解
Jul 07 #Java/Android
新手初学Java List 接口
Jul 07 #Java/Android
Spring Boot 整合 Apache Dubbo的示例代码
Jul 04 #Java/Android
Java实现聊天机器人完善版
JavaGUI模仿QQ聊天功能完整版
You might like
一个简单的PHP投票程序源码
2007/03/11 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
window.print打印指定div实例代码
2013/12/13 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
python学习之编写查询ip程序
2016/02/27 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
python计算auc指标实例
2017/07/13 Python
Python实现excel转sqlite的方法
2017/07/17 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
Python判断telnet通不通的实例
2019/01/26 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
餐饮投资计划书
2014/04/25 职场文书
金融保险专业求职信
2014/09/03 职场文书
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers