详细了解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 13 Java/Android
一篇带你入门Java垃圾回收器
Jun 16 Java/Android
java中重写父类方法加不加@Override详解
Jun 21 Java/Android
idea搭建可运行Servlet的Web项目
Jun 26 Java/Android
JavaWeb 入门:Hello Servlet
Jul 16 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
解决persistence.xml配置文件修改存放路径的问题
Feb 24 Java/Android
Java 数据结构七大排序使用分析
Apr 02 Java/Android
Java Spring Boot 正确读取配置文件中的属性的值
Apr 20 Java/Android
Spring Data JPA框架的核心概念和Repository接口
Apr 28 Java/Android
java.util.NoSuchElementException原因及两种解决方法
Jun 28 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
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
Yii框架form表单用法实例
2014/12/04 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
Python发送email的3种方法
2015/04/28 Python
Python中如何获取类属性的列表
2016/12/26 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
python制作mysql数据迁移脚本
2019/01/01 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
django解决订单并发问题【推荐】
2019/07/31 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
HQhair美国/加拿大:英国化妆品、美容及美发产品商城
2019/04/15 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
灵泰克Java笔试题
2016/01/09 面试题
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
校长一岗双责责任书
2015/05/09 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android