欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详细了解MVC+proxy

程序员文章站 2022-03-12 12:23:25
目录1、创建业务层userservice接口定义需要完成的功能2、创建持久层userdao接口定义具体的curd3、完成userservice接口和userdao的实现类4、创建invocationh...

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

总结

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

相关标签: MVC proxy 详解