详细了解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实现
Jun 26 Java/Android
分析Java中Map的遍历性能问题
Jun 26 Java/Android
Springboot集成阿里云OSS上传文件系统教程
Jun 28 Java/Android
如何给HttpServletRequest增加消息头
Jun 30 Java/Android
Java后台生成图片的完整步骤
Aug 04 Java/Android
Java 在线考试云平台的实现
Nov 23 Java/Android
Java异常处理try catch的基本用法
Dec 06 Java/Android
Java十分钟精通进阶适配器模式
Apr 06 Java/Android
Android开发实现极为简单的QQ登录页面
Apr 24 Java/Android
Java版 简易五子棋小游戏
May 04 Java/Android
springboot为异步任务规划自定义线程池的实现
Jun 14 Java/Android
Android学习之BottomSheetDialog组件的使用
Jun 21 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写杨辉三角实例代码
2011/07/17 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
Javascript里使用Dom操作Xml
2007/01/22 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
python求前n个阶乘的和实例
2020/04/02 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
AmazeUI 按钮交互的实现示例
2020/08/24 HTML / CSS
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
家长对老师的感言
2014/03/11 职场文书
化工见习报告范文
2014/10/31 职场文书
安阳殷墟导游词
2015/02/10 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书