这篇文章主要讲解了“mvc+proxy的原理及使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MVC+proxy的原理及使用方法”吧!目录创建业务层UserService接口定义需要完
这篇文章主要讲解了“mvc+proxy的原理及使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MVC+proxy的原理及使用方法”吧!
创建业务层UserService接口定义需要完成的功能
创建持久层UserDao接口定义具体的CURD
完成UserService接口和UserDao的实现类
创建InvocationHandler接口的实现类
创建表示层Servlet去完成调用
public interface UserService { boolean save(User user);}
public interface UserService { boolean save(User user);}
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; }}
为什么需要这个接口?
因为在开发中,业务层可能含有涉及到多步数据库操作,所以这一步需要开启事务,但是开发中这样的情况太多了,所以我们需要面向横切面编程,创建代理代理,在调用业务层方法时,我们利用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; }}
这里我就用输出语句代表事务语句。
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的原理及使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!
--结束END--
本文标题: MVC+proxy的原理及使用方法
本文链接: https://lsjlt.com/news/297723.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0