详细了解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 相关文章推荐
解决Maven项目中 Invalid bound statement 无效的绑定问题
Jun 15 Java/Android
Spring中bean的生命周期之getSingleton方法
Jun 30 Java/Android
解决SpringBoot文件上传临时目录找不到的问题
Jul 01 Java/Android
详细了解java监听器和过滤器
Jul 09 Java/Android
java设计模式--三种工厂模式详解
Jul 21 Java/Android
使用Spring处理x-www-form-urlencoded方式
Nov 02 Java/Android
Java异常处理try catch的基本用法
Dec 06 Java/Android
SpringBoot整合阿里云视频点播的过程详解
Dec 06 Java/Android
关于maven依赖 ${xxx.version}报错问题
Jan 18 Java/Android
Java实现给Word文件添加文字水印
Feb 15 Java/Android
Java实现添加条码或二维码到Word文档
Jun 01 Java/Android
OpenFeign实现远程调用
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 新手入门教程
2009/08/03 PHP
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
2010/07/29 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
手写Vue弹窗Modal的实现代码
2019/09/11 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
材料会计岗位职责
2014/03/06 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
低碳环保标语
2014/06/12 职场文书
入党转正申请报告
2015/05/15 职场文书
高温慰问简报
2015/07/21 职场文书