详细了解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 相关文章推荐
简单总结SpringMVC拦截器的使用方法
Jun 28 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
Java基础之this关键字的使用
Jun 30 Java/Android
java实现对Hadoop的操作
Jul 01 Java/Android
SpringBoot读取Resource下文件的4种方法
Jul 02 Java/Android
Java实现房屋出租系统详解
Oct 05 Java/Android
Spring事务管理下synchronized锁失效问题的解决方法
Mar 31 Java/Android
Spring Security使用单点登录的权限功能
Apr 03 Java/Android
Spring Boot项目传参校验的最佳实践指南
Apr 05 Java/Android
Java死锁的排查
May 11 Java/Android
SpringBoot详解执行过程
Jul 15 Java/Android
HttpClient实现表单提交上传文件
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+mysql分页代码详解
2008/03/27 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
php备份数据库类分享
2015/04/14 PHP
Yii中srbac权限扩展模块工作原理与用法分析
2016/07/14 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
javascript整除实现代码
2010/11/23 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
react-native android状态栏的实现
2018/06/15 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
Python编程之string相关操作实例详解
2017/07/22 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
缅怀革命先烈演讲稿
2014/05/14 职场文书
如何写辞职书
2015/02/26 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android