详细了解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 Shutdown Hook场景使用及源码分析
Jun 15 Java/Android
Java SSH 秘钥连接mysql数据库的方法
Jun 28 Java/Android
Java基础之详解HashSet的使用方法
Jun 30 Java/Android
浅谈resultMap的用法及关联结果集映射
Jun 30 Java/Android
Mybatis是这样防止sql注入的
Dec 06 Java/Android
java协程框架quasar和kotlin中的协程对比分析
Feb 24 Java/Android
Spring Security使用单点登录的权限功能
Apr 03 Java/Android
Android自定义双向滑动控件
Apr 19 Java/Android
带你了解Java中的ForkJoin
Apr 28 Java/Android
java实现面板之间切换功能
Jun 10 Java/Android
springboot读取resources下文件的方式详解
Jun 21 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录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
php的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
php输出图像的方法实例分析
2017/02/16 PHP
php json相关函数用法示例
2017/03/28 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
vue实现公共方法抽离
2020/07/31 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
python3中布局背景颜色代码分析
2020/12/01 Python
打印机墨盒:123Inkjets
2017/02/16 全球购物
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
自我鉴定范文200字
2013/10/02 职场文书
业务员岗位职责范本
2013/12/15 职场文书
一年级语文上册复习计划
2015/01/17 职场文书