详细了解MVC+proxy

Java有两种代理方式,一种是静态代理,另一种是动态代理。对于静态代理,其实就是通过依赖注入,对对象进行封装,不让外部知道实现的细节。很多 API 就是通过这种形式来封装的

详细了解MVC+proxy,恰卡网带你了解更多相关信息。

目录
  • 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

总结

本篇文章就到这里了,希望能够帮助到你,也希望您能够多多关注趣讯吧的更多内容!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/2114.html

(0)
上一篇 2021-07-10 01:45:22
下一篇 2021-07-10 01:45:24

相关推荐

  • 澳门精准资料大全2022正版(2021澳门免费精准资料大全)

    澳门精准资料大全2022正版,2021澳门免费精准资料大全 内容导航: 最新红码区清单(更新日期 2022年7月11日 23H50 2022年澳门资料大全神州大地的动物 洋金花资料…

    2022-09-21
    170
  • 白眼狼的人有哪些特征(什么叫白眼狼)

    诸葛亮在《出师表》中说:“亲近贤臣,远离小人,是西汉之所以兴盛的原因。”在个人的人际交往中也一样,一个人若想发展得好,远离小人是必须要做的事情。什么是小人?“白眼狼”就是不可忽视的一种。关于白眼狼,国学经典《菜根谭》里面的这句话讲得很好:

    2021-12-07 用户投稿
    4020
  • 「万王之王副业选择」万王之王3D不卖属性比MT4还更像WOW

    万王之王副业选择,万王之王不花钱职业内容导航:万王之王3D副职业选错了怎么办万王之王3D职业选择攻略哪个职业强万王之王大事万王之王3D不卖属性比MT4还更像WOW一、万王之王3D副职业选错了怎么办3D打印通常是采用数字技术材料打印机来实现的。常在模具制造、工业设计等领域被用于制造模型,后逐渐用于一些产品的直接制造,已经有使用这种技术打印而成的零部件。该技术在珠宝、鞋类、工业设计、建筑、工程和施

    2022-04-22
    990
  • 北京本土零新增,新增1例境外输入无症状感染者

    8月13日0时至24时,无新增本地确诊病例、疑似病例和无症状感染者;无新增境外输入确诊病例、疑似病例,新增1例境外输入无症状感染者;治愈出院1例。

    2021-08-14
    3790
  • 左溢的初吻,第一次接吻后有没有什么尴尬的事

    第一次啊,初吻,那是我上中学的时候,习惯隔壁班的一个女孩子,我能感觉到她也喜欢我左溢的初吻。跨年的时候我们在一起了,那天下着大雪,也是初雪。后来我们就经常在一起玩,利用周末,其实对于初吻这个事情,心里是有计划的,主要是喜欢,也想感受一下到底是什么感觉

    2022-01-16
    1570
  • 商标如何申请?(怎样注册商标)

    怎样注册商标(商标如何申请?) 注册商标初步配备一、商标查询商标查询的目的是,您想要注册的商标是否存在近似商标或者是否有一模一样的商标被注册了,如果存在近似商标,或者一模一样的商标,那你的商标是不能注册成功的。因此商标注册最重要的,最为关键的一步,可以大大地提升商标注册的成功率,同时节省你的钱和时间(比如不查询之前设计商标,设计费或者初步失望给你带来了精神压力)。 二、确定好以什么名义来进行申请注…

    2021-07-28
    1590

发表回复

登录后才能评论