详细了解MVC+proxy

网友投稿 660 2022-12-29

详细了解MVC+proxy

详细了解MVC+proxy

目录1、创建业务层UserService接口定义需要完成的功能2、创建持久层UserDao接口定义具体的CURD3、完成UserService接口和UserDao的实现类4、创建InvocationHandler接口的实现类5、创建表示层Servlet去完成调用总结

1、创建业务层UserService接口定义需要完成的功能

/**

* 创建目标接口,定http://义目标接口要完成的功能

*/

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.gethttp://Password()+"')");

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);

//创建代理对象

//将返回值转为接口类型

http:// UserService service=(UserService)Proxy.newProxyInstance(loader,interfaces,handler);

boolean success=service.save(new User("张三","123456"));

System.out.println(success?"保存成功":"保存失败");

}

}

总结

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:城管一体化政务服务平台(城管一体化政务服务平台app)
下一篇:综合许可证一网通办(一网通办行政服务中心)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~