详细了解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 16 Java/Android
一篇文章带你复习java知识点
Jun 28 Java/Android
SpringBoot集成Druid连接池连接MySQL8.0.11
Jul 02 Java/Android
浅谈spring boot使用thymeleaf版本的问题
Aug 04 Java/Android
使用jpa之动态插入与修改(重写save)
Nov 23 Java/Android
Java异常处理try catch的基本用法
Dec 06 Java/Android
springboot新建项目pom.xml文件第一行报错的解决
Jan 18 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
Mar 17 Java/Android
Java 常见的限流算法详细分析并实现
Apr 07 Java/Android
Java字符缓冲流BufferedWriter
Apr 09 Java/Android
Java 多态分析
Apr 26 Java/Android
Java设计模式中的命令模式
Apr 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
PHP 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
php&amp;mysql 日期操作小记
2012/02/27 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
ES6学习教程之对象字面量详解
2017/10/09 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
python编写Logistic逻辑回归
2020/12/30 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
Linux下远程连接Jupyter+pyspark部署教程
2019/06/21 Python
python实现对变位词的判断方法
2020/04/05 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
python cookie反爬处理的实现
2020/11/01 Python
Python的collections模块真的很好用
2021/03/01 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
柯基袜:Corgi Socks
2017/01/26 全球购物
婚纱摄影师求职信范文
2014/04/17 职场文书
个人租房协议书样本
2014/10/01 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
高中美术教学反思
2016/02/17 职场文书
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技