Mongodb与Spring和SpringMVC执行过程

一:Demo目录结构


二:接口BaseRepository



三:接口CustomerRepository



四:接口CustomerRepositoryEnhance




五:实现类CustomerRepositoryImpl


这个实现类,作为MongoRepository的一个扩展。在扫描baseconfig这个包时,一般来说只有这样一个Impl实现类,如果有两个,则会报错。因为程序自己去寻找CustomerRepository的实现类,CustomerRepositoryImpl,要扫描整个包,启动注解,使其成为Spring的bean.


六:控制器CustomerController





七:基类MongoBaseEntity




八:被@Document注解的Customer




九:CustomerService





十:BaseControllerTest




十一:CustomerControllerTest





十二:测试结果




一个对象(Customer)就是一个文档。


十三:配置文件



十四:pom依赖




有时候会存在版本冲突。程序逻辑是没有问题的,但在测试的时候,报一些bean注入错误,很可能是jar冲突。扫描包路径,启动注解,需要成为Spring bean的,需要写上注解。


Spring

当启动应用程序的时候。其中DispatcherServlet加载SpringMVC相关bean比如处理映射,控制器,视图解析。ContextLoaderListener加载Spring的其他bean。src下的配置文件,直接加载进来。提供DI和AOP功能。

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


SpringMVC

Spring的IOC(DI)和AOP是根本,许多功能的实现都是基于这两个知识点的。当一个请求来的时候,经过SpringMVC中的组件,再响应到客户端。当一个请求来的时候,DispatcherServlet使用组建handler mapping(处理器映射)来确定此请求走哪个controller。在这个controller中,进行业务逻辑,产生Modal。controller把请求,model,逻辑视图逻辑名又发给DispatcherServlet。然后DispatcherServlet通过组建,view resolver将逻辑视图与物理视图匹配。有了View(视图),model(数据),视图被数据渲染(jsp中通过标签库),然后响应到客户端。原来可以在jsp中写JSTL或者Spring提供的标签库,但是影响了Html文档的整洁性。现在好多使用Webpack,Vue(nodejs)或者Angularjs进行前后端分离。页面就是走js框架的路由,然后都使用Ajax异步获取数据。js框架会监听数据,一旦数据被修改,自动更新数据。这里有加载顺序问题,异步导致的,有时候需要手动进行处理。


Object

在这个生态系统中,无论是ORM,还是JPA,JDBCTemplate,或者是SpringMVC,struts2。或者是NoSQL(Mongodb,Redis,HBase,Neo4j)他们都与Spring集成(驱动Jar,依赖Jar,jar之间的冲突(版本,重复))。都注册为Spring的bean,而这个bean只是一个实体对象,它有记忆,也有行为。当事物多的时候,我们就进行分类。分类的标准按照代码所负责的功能,然后利用名称进行表面上的区分,本质上是逻辑隔离。所以我们分成了,DAO,Service,Controller。每一层都在做自己的事情。Spring提供了把这些相关类注册并管理这些bean,并提供一个对面向对象的补充的面向切面编程。所以无论看见什么,只要在Spring这个生态系统中,首先得是Spring的bean(配置文件,Java配置(@Bean)),其实Spring的bean又可以叫做POJO增强型Java对象(POJO对象既可以运用在Spring这个生态系统中,也可以当成Java的普通对象使用,因为Spring是非侵入式编程,使用它的功能,不需要实现什么接口,或者继承什么类)。@Repository,@Service,@Controller只是做了一件事,把这个类注册为Spring的Bean。而我们的属性(引用类型,比如对象)通过@Resource或者@Autowired是把已经声明的bean,进行初始化,这样在使用的时候才不抛NullPointerException,而这个@resource或@Autowired就是做了一件set()方法。而在Controller中又继续分类处理(SpringMVC)。


SQL

无是关系性还是NoSQL,他们都是跟设计的字段相关,都是一些对象。持久性数据(写到关系性数据在,写到NoSQL数据中),对象Spring来说都是差不多的,他们只是对业务有很大的意义。或者使用缓存数据是另个对业务逻辑有意义的一种思想。但是缓存是缓存的概念,SQL和NoSQL又是它自己的概念,都有自己独特的意义。所以,SQL和NoSQL对于Spring来说就是数据库的类型而已。缓存的概念是一个很大的主题,很多Java框架都有自己的缓存,Mybatis(有两级缓存,一级默认开启,而且需要配置),Hibernate(有三级缓存),这些缓存是针对查询的数据进行缓存的。其实数据库一般来说也是有缓存的。


MongoTemplate

之前学习JDBCTemplate提供操作数据的方法。再学习Mongodb时候,MongoRepository进行方法扩展,MongoTemplate进行操作Mongodb。设计模式模板方法,讲述的是做一件事的固有流程,就是大致流程一样,只是某些实现细节不一样,可以采用预留钩子处理。





  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值