什么是Spring
之前已经学习过web三层(数据库链接层dao,业务逻辑控制层service,用户层web)。
在开发过程中,我们不断引入更加优秀的工具的目的都是在安全、高效的基础上,简化开发,和易于维护。
所以引入spring框架的目的就是解决整个开发过程中各层之间的衔接问题,让各层之间的相互依赖程度降低,来达到简化开发的目的。
那么spring是通过哪些方法来实现这种目的呢?
1.控制反转(IOC:Inversion of Control)
就是之前我们创建新对象的时候都是用new来创建,而这样带来的问题就是,程序编译为class后不能修改,不易维护。
所以我们需要将创建对象的权利交给spring容器(IOC容器),把对象的创建、初始化、销毁等工作的权利交给spring容器,就叫IOC。
2.依赖注入(DI:Dependency Injection)
以前我们创建了对象以后,需要给他的属性赋值,但在spring中,这个赋值的过程就不叫赋值了,叫依赖注入。
3.面向切面编程(AOP:Aspect Oriented ming)
我们在开发过程中,会有很多重复的代码,会造成代码冗余。
为此我们通常是将公有代码抽出去,做成一个新的方法,每次使用时直接调用,但这样还不好,因为再次插入一个新功能时,还要手动调用,不仅修改麻烦,也会造成代码冗余。
在spring中,提供了一个更优秀的解决方法,就是把抽取方法不仅仅局限在一个模块或功能中,而是放在整个执行流程来看,进行一个全局的优化,这样的思想,就叫AOP。
简单的认识了IOC,DI,AOP接下来我们就来看看在spring中如何实现。
1.IOC创建对象的四种方法
链接:https://www.cnblogs.com/sxtr/p/10878985.html
什么是Spring的更多相关文章
- 基于spring注解AOP的异常处理
一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...
- 玩转spring boot——快速开始
开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
- [Spring]IoC容器之进击的注解
先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- Spring之旅(2)
Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...
- Spring之旅
Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建 ...
随机推荐
- BluetoothFindNextRadio 函数
BOOL BluetoothFindNextRadio( HBLUETOOTH_RADIO_FIND hFind, HANDLE* phRadio ); BluetoothFindNextRadio找 ...
- 使用python+requests对接口进行测试
import unittestimport requestsimport json class Login(unittest.TestCase): def setUp(self): self.base ...
- Asp.net 微信企业号网页开发流程
一.在pageload方法中获取code var code = GetCode(); private string GetCode() { return HttpContext.Current.Req ...
- hadoop slf4j-api 1.6.x (or later) is incompatible with this binding
hadoop slf4j-api 1.6.x (or later) is incompatible with this binding 解决方法: 在POM文件最前面加入: <dependenc ...
- 5、bam格式转为bigwig格式
1.Bam2bigwig(工具) https://www.researchgate.net/publication/301292288_Bam2bigwig_a_tool_to_convert_bam ...
- Spring入门第二课
看代码 package logan.spring.study; public class HelloWorld { private String name; public void setName2( ...
- 移除KVO的风险
为之前项目添加一个功能用到了一个开源库XMTextView,然后运行报错提示: 显示没有注册一个叫font的观察者,所以闪退.但是我的UITextView没有添加观察者呀,怎么会删除呢? 原来是由分类 ...
- 《OD面试》Java软件工程师
一.JVM自动内存管理机制 1. Java内存模型 1.1 由所有线程共享的数据区: 1.1.1 方法区(Method Area), Non-Heap(非堆) 用户存储已被虚拟机加载的类信息.常量.静 ...
- 解决运行Robot Framework报‘’ascii’错误
在Python27\Lib\site-packages中新建‘sitecustomize.py’,内容如下: #coding=utf8import sysreload(sys)sys.setdefau ...
- React方法论
按照目前学习进度不定更新 react渲染的效率,看起来是全体的渲染,其实react在虚拟dom上的处理简直完美.它会过滤掉那些原来就有的东西,不去全体地重复渲染一遍. 即将进入实战,React至今的个 ...