一、Spring是什么?

Spring是一个开源的控制反转 ( IoC ) 和面向切面 ( AOP ) 的容器框架, 它的主要目的是简化企业开发.

二、控制反转(IoC)

控制反转: 所谓的控制反转就是应用本身不负责依赖对象的创建及维护, 依赖对象的创建及维护是由外部容器负责的.

这样控制权就由应用转移到了外部容器, 控制权的转移就是所谓的反转.

public class PersonServiceBean {
// 自己new一个对象
private PersonDao personDao = new PersonDaoBean();
public void save(Person person) {
personDao.save(person);
}
} public class PersonServiceBean {
// 由spring通过set方法注入对象
private PersonDao personDao;
public void save(Person person) {
personDao.save(person);
}
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}
}

三、依赖注入(DI)

依赖注入: 所谓的依赖注入就是在执行期, 由外部容器动态地将依赖对象注入到组件中.

为了能更好的理解依赖注入, 我们最好还是问自己两个问题:

1. 谁依赖谁? 为什么须要依赖?

当然是应用程序依赖于IoC容器, 应用程序须要IoC容器来提供对象须要的外部资源.

2. 谁注入谁? 注入了什么?

当然是IoC容器注入应用程序某个对象, 注入对象所须要的外部资源(对象, 资源, 常量数据).

事实上IoC和DI是统一个概念的不同角度描写叙述, 相对IoC而言, '依赖注入' 明白描写叙述了被注入对象依赖IoC容器配置依赖对象.

四、为何要用Spring

在项目中引入spring能够给我们带来下面优点:

1. 减少组件之间的耦合度, 实现软件各层之间的解耦.

2. 能够使用容器提供的众多服务, 如: 事务管理服务, 消息服务等. 当我们使用容器管理事务时, 开发者就不再须要手动控制事务,

也不须要处理复杂的事务传播.

3. 容器提供单例模式支持, 开发者不再须要自己编写实现代码.

4. 容器提供AOP技术, 利用它非常easy实现如权限控制等功能.

5. 容器提供众多辅助类如: JdbcTemplate、HibernateTemplate等, 使用这些类可以加快应用的开发.

6. spring为主流的应用框架提供了集成支持, 如集成Hibernate、JPA、Struts等, 方便我们的开发.

五、轻量级与重量级

spring属于轻量级框架还是重量级框架?

划分一个应用属于轻量级还是重量级, 主要看他使用了多少服务. 使用的服务越多, 容器就要为普通java对象做的工作越多,

必定会影响到应用的公布时间及执行性能.

对于spring容器, 它提供了非常多服务, 但这些服务并非默觉得应用打开的, 应用须要某种服务, 还须要指明使用该服务, 假设应用使用的服务非常少,

如: 仅仅使用spring核心服务, 那么我们能够觉得此时应用属于轻量级的, 假设应用使用了spring提供的大部分服务,这时应用就属于重量级的.

眼下EJB容器就由于它默觉得应用提供了EJB规范中全部的功能, 所以它属于重量级.

深入探索spring技术内幕(一): spring概述的更多相关文章

  1. Spring技术内幕:Spring AOP的实现原理(二)

    **二.AOP的设计与实现 1.JVM的动态代理特性** 在Spring AOP实现中, 使用的核心技术时动态代理.而这样的动态代理实际上是JDK的一个特性.通过JDK的动态代理特性,能够为随意Jav ...

  2. Spring技术内幕总结 - AOP概述

    AOP是Aspect-Oriented Programming(面向方面/切面编程)的简称.Aspect是一种新的模块化机制,用来描述分散在对象.类或函数中的横切关注点.分离关注点使解决特定领域问题的 ...

  3. Spring技术内幕:Spring AOP的实现原理(一)

    一.SpringAOP的概述 1.AOP概念 AOP是Aspect-Oriented Programming(面向切面编程)的简称.维基百科的解释例如以下: Aspect是一种新的模块化机制,用来描写 ...

  4. Spring技术内幕之Spring Data JPA-自定义Repository实现

    1.自定义Repository方法接口,让接口的实现类来继承这个中间接口而不是Repository接口 package com.data.jpa.dao; import java.io.Seriali ...

  5. Spring技术内幕:Spring AOP的实现原理(三)

    生成SingleTon代理对象在getSingleTonInstance方法中完毕,这种方法时ProxyFactoryBean生成AopProxy对象的入口.代理对象会封装对target目标对象的调用 ...

  6. Spring技术内幕:Spring AOP的实现原理(五)

    7.Advice通知的实现 AopProxy代理对象生成时,其拦截器也一并生成.以下我们来分析下Aop是怎样对目标对象进行增强的.在为AopProxy配置拦截器的实现中,有一个取得拦截器配置过程,这个 ...

  7. Spring技术内幕:设计理念和整体架构概述(转)

    程序员都很崇拜技术大神,很大一部分是因为他们发现和解决问题的能力,特别是线上出现紧急问题时,总是能够快速定位和解决. 一方面,他们有深厚的技术基础,对应用的技术知其所以然,另一方面,在采坑的过程中不断 ...

  8. 《spring技术内幕》读书笔记(1)——什么是POJO模式

    今天在看<spring技术内幕>,第一章中多次提到了使用POJO来完成开发,就百度了一下,在此保留 1.     什么是POJO POJO的名称有多种,pure old java obje ...

  9. Spring技术内幕:SpringIOC原理学习总结

    前一段时候我把Spring技术内幕的关于IOC原理一章看完,感觉代码太多,不好掌握,我特意又各方搜集了一些关于IOC原理的资料,特加深一下印象,以便真正掌握IOC的原理. IOC的思想是:Spring ...

随机推荐

  1. OpenStack IceHouse 部署 - 2 - 网络与软件环境初始化

    OpenStack应用:节点软硬件环境配置    节点硬件与IP分配 实验室网关 10.14.39.1 各个节点 节点名称 硬件(Linux硬盘分区,RAM,CPU) ip地址(接口) 作用与运行的服 ...

  2. HTML5触摸事件演化tap事件

    触摸事件是移动浏览器特有的HTML5事件,虽然click事件在pc和移动端更通用,但是在移动端会出现300ms延迟,较为影响用户体验,300ms延迟来自判断双击和长按,因为只有默认等待时间结束以确定没 ...

  3. CSS 伪类(下)结构性伪类\UI伪类\动态伪类和其他伪类 valid check enable child required link visit

      伪类选择器汇总伪类选择器有4种, 结构性伪类\UI伪类\动态伪类和其他伪类. 具体如下 结构性伪类选择器结构性伪类选择器它能够根据元素在文档中的位置选择元素, 这类元素都有个前缀":&q ...

  4. LeetCode 514----Freedom Trail

    问题描述 In the video game Fallout 4, the quest "Road to Freedom" requires players to reach a ...

  5. 微服务架构之spring cloud eureka

    Spring Cloud Eureka是spring cloud的核心组件,负责服务治理功能,起到中心枢纽作用,其它组件都依赖eureka来获取服务,然后再根据项目需求实现自己的业务,eureka在整 ...

  6. weex 数据绑定,动态控制组件的显示内容及样式

    无论的原生开发还是weex开发,经常会需要我们对一些组件/控件动态赋值,在原生中,我们大家都知道,对控件setText就可以了,那么在weex中呢,我们需要怎么做呢,其实很简单,几行代码就可以搞定!首 ...

  7. Non-resolvable parent POM for com.*******

    场景: 同事新打了一个jar包到私服里面,自己删除了本地对应的中央仓库的依赖包,再次重新下载.  于是我又打开了一个idea的窗口重新引入这个项目,然后重新下载依赖的服务. 结果就一直报这个问题... ...

  8. 个人总结4-dbutils总结

    昨天学习了dbutils的使用方法,简化了使用的步骤,可以使用三四步就可以写出来,queryRunner的使用方法有了简单的了解,目前可以使用dbutils实现最简单的增删改查. 今天准备学习准备写登 ...

  9. eclipse 乱码问题总结

    Eclipse 的控制台必须用GBK编码.所以条件1和条件4必须同时满足否则运行的还是乱码.才能保证不是乱码. 条件1,Window  | Preferences  | Workspace  |  T ...

  10. 关于Unity3d的Quaternion.Slerp的学习

    首先在场景中创建三个cube的GameObject,from表示要转换之前的样子,to表示转换之后的样子,change表示转的效果.如下图所示: 其中from和change cube开始运行之前的tr ...