ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring笔记系列--1

2020-03-20 10:01:37  阅读:171  来源: 互联网

标签:容器 系列 框架 Spring dao 笔记 视图 方法


什么是Spring?

Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核。 提供了展现层 SpringMVC和持久层 Spring JDBCTemplate以及业务层事务管理等众多的企业级应用技术,还能整 合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架

什么是IOC(控制反转)?

第一次看到IOC是在大内老A的一篇.net Core框架解析上看到的,我的理解是:IOC是一种框架设计思想,它定义了一个容器,将原本由程序做的一些操作放在容器中,交由框架来实现~

这样说可能有点抽象,举个简单的例子,我们在使用MVC框架的时候,它的流程是通过路由到指定的控制器,再通过控制器来激活相应的View视图。我们简单的剖析一下它的实现(大内老A的文章里有讲):

首先我需要加一个监听器来监听用户的请求(java有三大组件,监听器,拦截器,servlet,.net中不太确定,应该也差不多),然后需要定义一个控制器根据用户请求来找对应的视图,再一个视图解析器用来显示视图。当一个请求过来的时候,如果用程序来实现我们这个流程,需要先实例化控制器,再实例化视图,每一个请求我们都需要做这样的操作,那代码的冗余就会很大。我们将这一套的东西封装在一个容器中,由框架帮我们实现,就不需要我们自己来动手了,简化了很大的开发流程,这里其实有点像模板模式,但是有区别。

在Spring中,所有的类和方法,我们都可以把它加载到我们的Spring容器里面。由容器在运行的时候帮我们自动创建这些类或者方法的实例,再通过依赖注入的方式,将这些实例注入到需要他们的地方。这应该也是Spring框架重配置的原因之一吧。IOC的这一块比较抽象。

什么是依赖注入(DI)?

 

用简单的三层来说明一下:我们在开发中由数据访问层(DAO)连接数据库,业务逻辑层(service)调用数据访问层(DAO)完成逻辑,再由表现层(UI)调用业务逻辑层(service),我们在service层中使用dao层的方法的时候,需要在service中将dao层的数据实例化出来,而使用了IOC的思想之后,我们的dao层是由容器帮我们创建的,所以,我们不需要手动的去创建dao层了,但是容器帮我们的创建的这个dao数据在哪?怎么用就成了一个问题。我们思考一下可不可以在service定义一个字段来接收容器帮我们创建的dao的实例?这就是依赖注入!

依赖注入主要有两种实现方式:一种是无参构造的方式注入,一种是set方法的注入。这里不细说,后面慢慢讲~

什么是AOP?

AOP又叫面向切面编程,与他对应的应该是OOP(面向对象编程),我理解的OOP是将现实中的物体特性抽取成一个可以用某些属性表示的实体类,在程序中处理。而AOP是在OOP的基础上,对OOP的一种优化或者说扩展。

我在之前的博客中记录过AOP是通过代理模式实现的。举个例子理解一下,就像我要买手机,然后在远方有一个实体店的机子不错,但是太远了,这时候,有一个中间商跟我说,我能帮你搞到,但是你得多付钱,当然我会给你一些小赠品,我一听蛮合算的,就答应了。这个例子在程序中的一个表现就是,我要删除某个东西,在dao层有一个删除方法,后来,产品说要在删除之前加一个日志,我通过一个新的方法封装这个删除方法,然后在新方法的删除之前加一个日志方法,在表现层调用这个新方法。其中新方法类似于中间商,删除方法类似于远方的实体店,而日志,相当于小赠品,这里在删除方法之前加日志就叫做前置增强。其中删除的方法叫做切点,新方法叫切面,而封装新方法的过程叫做织入。

 

标签:容器,系列,框架,Spring,dao,笔记,视图,方法
来源: https://www.cnblogs.com/Xiaomoml/p/12529849.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有