详细了解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 11 Java/Android
Java方法重载和方法重写的区别到底在哪?
Jun 11 Java/Android
SpringBoot整合JWT的入门指南
Jun 29 Java/Android
Java Socket实现多人聊天系统
Jul 15 Java/Android
springboot新建项目pom.xml文件第一行报错的解决
Jan 18 Java/Android
Java线程的6种状态与生命周期
May 11 Java/Android
Android Studio实现带三角函数对数运算功能的高级计算器
May 20 Java/Android
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
Jun 01 Java/Android
Java异常体系非正常停止和分类
Jun 14 Java/Android
使用Postman测试需要授权的接口问题
Jun 21 Java/Android
Spring Boot 的创建和运行示例代码详解
Jul 23 Java/Android
app场景下uniapp的扫码记录
Jul 23 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连接SQLServer2005 的问题解决方法
2010/07/19 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
2014/06/12 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
快速使用node.js进行web开发详解
2017/04/26 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
python pandas实现excel转为html格式的方法
2018/10/23 Python
python调用c++传递数组的实例
2019/02/13 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
简单了解python变量的作用域
2019/07/30 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
四种会话跟踪技术
2015/05/20 面试题
电子商务毕业生求职信
2013/11/10 职场文书
翻译学院毕业生自荐书
2014/02/02 职场文书
五水共治一句话承诺
2014/05/30 职场文书
常务副总经理岗位职责
2015/02/02 职场文书