详细了解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 相关文章推荐
如何解决springcloud feign 首次调用100%失败的问题
Jun 23 Java/Android
利用Java设置Word文本框中的文字旋转方向的实现方法
Jun 28 Java/Android
详解Spring事件发布与监听机制
Jun 30 Java/Android
Java中多线程下载图片并压缩能提高效率吗
Jul 01 Java/Android
Java中CyclicBarrier和CountDownLatch的用法与区别
Aug 23 Java/Android
SpringBoot+Redis实现布隆过滤器的示例代码
Mar 17 Java/Android
SpringBoot整合Minio文件存储
Apr 03 Java/Android
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Apr 07 Java/Android
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
Apr 13 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
Jmerte 分布式压测及分布式压测配置
Apr 30 Java/Android
MyBatis XPathParser解析器使用范例详解
Jul 15 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
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
ezSQL PHP数据库操作类库
2010/05/16 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
如何实现JS函数的重载
2006/09/22 Javascript
用JavaScript显示随机图像或引用
2009/04/21 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
python频繁写入文件时提速的方法
2019/06/26 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
python 递归相关知识总结
2021/03/03 Python
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
公司门卫岗位职责
2014/03/15 职场文书
保密工作目标责任书
2014/07/28 职场文书
青春雷锋观后感
2015/06/10 职场文书
聘用合同范本
2015/09/21 职场文书
2016高考寄语集锦
2015/12/04 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
创业的9条正确思考方式
2019/08/26 职场文书