详细了解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?"保存成功":"保存失败"); } }
总结
本篇文章就到这里了,希望能够帮助到你,也希望您能够多多关注的更多内容!