1、定义与特点

  定义:一个分模块的一站式后台开发框架。

  特征:

  (1)比起EJB,更轻量级别的容器框架,模块形式组织,只需要调用相应模块(jdbc、springmvc)

  (2)Spring IOC低耦合容易组合对象之间的关系

  (2)AOP更易对功能进行扩展,不需要将无关代码写进主业务中

  (3)Spring并不是直接造轮子,而是利用已有技术,比如ORM(对象关系映射,将对象映射到数据库)框架,logging框架;

2、  IOC/DI

  控制反转/依赖注入, bean本身不相互依赖,产生关系的活动进行不依赖于任何一方,整个依赖关系构建(注入)由第三方负责管理。

  控制反转其实现方法是依赖注入,甲方开放接口,在它需要的时候,能够让乙方传递进来(注入)

  传统的方式是通过在程序中自己new对象A,再构建依赖对象B并注入到A中;

  

  而Spring中创建和注入对象这过程交给了IOC容器处理,即动态的向某个对象提供他所需要的依赖对象,基础技术是反射。

  

  优点1,不必要了解下层类代码(历史维护的底层代码),直接在需要的时候注入。实际项目中,有的Service Class可能是十年前写的,有几百个类作为它的底层。假设我们新写的一个API需要实例化这个Service,就需要了解大量历史代码。IoC Container的这个特性就很完美的解决了这类问题——因为这个架构要求你在写class的时候需要写相应的Config文件,所以你要初始化很久以前的Service类的时候,前人都已经写好了Config文件,你直接在需要用的地方注入这个Service就可以了。这大大增加了项目的可维护性且降低了开发难度。

  优点2,资源由第三方控制,降低耦合度,同时方便资源的配置和管理。

3、 AOP

  在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

  (个人对于aop理解就是通过代理模式,将与主业务无关的代码插入整个逻辑中,而不污染原有的功能结构)

4、 bean配置(bean注册)

  (1)    基于xml的bean配置(ApplicationContext)

  使用被Spring命名空间的所支持的一系列的XML标签来实现,如context、beans、jdbc、tx、aop、mvc等。

属性<property name="name" value="tom"></property>

  构造方法<constructor-arg value="Mike" name="name"></constructor-arg>

  (2)    基于注解的bean配置

  将bean描述转移到组件类的内部,只需要在相关类上、方法上或者字段声明上使用注解即。

@Component:泛指通用组件;用于对组件类进行标注

  @Repository:用于对DAO组件类进行标注;

  @Service:用于对Service组件类进行标注;

  @Controller:用于对Controller组件类进行标注;

(3)基于java类的bean配置(通过代码配置)

@Configuration所注解的类则表示这个类的主要目的是作为bean定义的资源类似于<beans>;@Bean注解标注某个方法,告知这个方法返回一个对象,类似于<bean>。Ps:与A相比,因为是java代码,可以在编译器检查类型合法和id唯一。

  下图左上是基于java的bean声明的基本语法方式,右上是如何进行bean之间的相互依赖声明,下方是如何初始化和调用的过程。

 

5、 bean注入(bean使用,eg:类中包含一个类对象bean)

  (1)    基于xml注入-属性注入

  属性注入要求Bean提供一个默认的构造函数,并为需要注入的属性提供对应的SetXXX方法。Spring先调用Bean的默认构造函数实例化Bean对象,然后通过反射的方式调用Setter方法注入属性值。

public class LogonService implements BeanNameAware{

private UserDao userDao;

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

}

<bean id="userDao" class="com.baobaotao.anno.UserDao"/>

<bean class="com.baobaotao.anno.LogonService">

<property name="userDao" ref="userDao"></property>

</bean>

  (2)    基于xml注入-构造方法

  使用构造函数注入的前提是Bean必须提供带参数的构造函数。

public class LogonService implements BeanNameAware{

private UserDao userDao;

public LogonService(){}

public LogonService(LogDao logDao, UserDao userDao) {

this.userDao = userDao;

}}

<bean id="userDao" class="com.baobaotao.anno.UserDao"/>

<bean class="com.baobaotao.anno.LogonService">

<constructor-arg ref="userDao"></constructor-arg>

</bean>

  (3)    基于注解注入

  @required注释在某个设置方法上,避免因为bean太多导致忘记注入

  @Autowired有更细粒度的装配控制

  @Qualifier(“userDao”)用于处理存在两个相同类型的bean时,自动装配产生歧义的问题

@Service

public class LogonService implements BeanNameAware{

@Autowired(required=false)

@Qualifier("userDao")

private UserDao userDao;}

6、 spring中bean的自动装配

  无须在Spring配置文件中描述JavaBean之间的依赖关系(如配置<property>、<constructor-arg>)。IOC容器会自动建立javabean之间的关联关系。

  (1)    no-默认情况下采用”ref”进行手动绑定;

  (2)    byname-根据名字进行装配

    

  (3)    byType-根据某个bean所持有的依赖变量的数据类型进行自动装配

    

  (4)    constructo-与byType类似,只不过是按照构造函数的参数类型进行对应bean匹配

  (5)    autodetect-自动使用constructor和byType进行自动装配

 

7、 Spring作用域

  结构:<bean id="userDao" class="com.ioc.UserDaoImpl" D="singleton"/>

  singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象。Singleton作用域是Spring中的缺省作用域,也可以显示的将Bean定义为singleton模式,配置为:

  prototype:原型模式,每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态,

  request:在一次Http请求中,容器会返回该Bean的同一实例。而对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效,当前Http请求结束,该bean实例也将会被销毁。

  session:在一次Http Session中,容器会返回该Bean的同一实例。而对不同的Session请求则会创建新的实例,该bean实例仅在当前Session内有效。

  global Session:在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。

8、 Spring中设计模式

  单例模式-针对bean的singleton作用域

  代理模式-AOP中体现的动态代理

  工厂模式- BeanFactory用来创建对象的实例

spring(一)-基本概念的更多相关文章

  1. Spring AOP基本概念

    Spring AOP基本概念 目录 Spring AOP定义 AOP基本术语 通知类型 AOP定义 AOP基本术语 切面( Aspect ):一个能横切多个对象的模块化的关注点.对Spring AOP ...

  2. spring技术核心概念纪要

    一.背景 springframework 从最初的2.5版本发展至今,期间已经发生了非常多的修正及优化.许多新特性及模块的出现,使得整个框架体系显得越趋庞大,同时也带来了学习及理解上的困难. 本文阐述 ...

  3. Spring4- 01 - Spring框架简介及官方压缩包目录介绍- Spring IoC 的概念 - Spring hello world环境搭建

    一. Spring 框架简介及官方压缩包目录介绍 主要发明者:Rod Johnson 轮子理论推崇者: 2.1 轮子理论:不用重复发明轮子. 2.2 IT 行业:直接使用写好的代码. Spring 框 ...

  4. Spring入门篇——第5章 Spring AOP基本概念

    第5章 Spring AOP基本概念 本章介绍Spring中AOP的基本概念和应用. 5-1 AOP基本概念及特点 5-2 配置切面aspect ref:引用另外一个Bean 5-3 配置切入点Poi ...

  5. Spring系列2:Spring容器基本概念和使用

    本文内容 简单回顾IoC和DI概念 Spring容器的概念 的xml配置和初始化 容器的基本使用 bean的定义和初始化配置 简单理解IoC和DI概念 什么是IoC控制反转? 通俗地但不严谨地讲,以前 ...

  6. spring之aop概念和配置

    面向切面的一些概念: 简单说: 连接点就一些方法,在这些方法基础上需要额外的一些业务需求处理. 切入点就是方法所代表的功能点组合起来的功能需求. 通知就是那些额外的操作. 织入就是使用代理实现整个切入 ...

  7. Spring学习总结(1)——Spring AOP的概念理解

    1.我所知道的aop 初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等.一下子让你不知所措,心想着:怪不得 很多人都和我说aop多难多难 .当我看进去 ...

  8. Spring Aop重要概念介绍及应用实例结合分析

    转自:http://bbs.csdn.net/topics/390811099 此前对于AOP的使用仅限于声明式事务,除此之外在实际开发中也没有遇到过与之相关的问题.最近项目中遇到了以下几点需求,仔细 ...

  9. Spring AOP入门——概念和注意事项

    AOP什么? AOP在功能方面,它是之前和之后运行一些业务逻辑,一些操作(比方记录日志.或者是推断是否有权限等),这些操作的加入.全然不耦合于原来的业务逻辑.从而对原有业务逻辑全然是透明. 也就是说. ...

  10. (一)spring MVC基本概念和流程

    MVC的概念 Model(模型):包含数据和行为.不过现在一般都分离开来:Value Object(数据) 和 服务层(行为). View(视图):负责进行模型的展示,一般就是展示给用户的界面. Co ...

随机推荐

  1. django管理界面使用与bootstrap模板使用

    一.bootstrap模板使用 1.去bootstrap官网找一个合适的模板,下载下来,右键另存为即可 bootstrap官网---->bootstrap中文文档3-------->起步- ...

  2. 【Linux】linux文件夹打包命令

    .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ---------------------- ...

  3. centos7 安装jdk、Tomcat

    1.安装jdk 下载jdk: 解压:tar -zxvf filename -C /usr/local/jdk8/ 配置环境变量: vim /etc/profile 添加如下内容:JAVA_HOME根据 ...

  4. node.js发邮件

    在node上使用第三方类库(nodemailer)发邮件是一件很esay的事情:) app.js   以QQ邮箱为例 var nodemailer = require('nodemailer'); v ...

  5. jq实现发送验证码倒计时60s

    setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式.方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭. setTimeout() :在指定的毫 ...

  6. CSS 兼容性支持

    CSS 兼容性支持 在一个CSS属性还没有成为标准之前,各浏览器厂商已经做了这个属性的实现,可能各浏览器实现不尽相同,所以加入属性前缀区分. safari , chrome:-webkit- oper ...

  7. .NET开源工作流RoadFlow-表单设计-按钮

    在表单中添加一个按钮: 宽度,高度:按钮的宽度和高度. 文本:按钮显示的文本. 事件:点击按钮执行的操作.

  8. SharePoint 2013 - REST Service

    0. SharePoint 2013使用_api来标识出 REST SERVICE,REST Service其实是 client.svc web service的一部分,但为了简化 REST URI的 ...

  9. 由AlphaGO引发的思考

    这几天AlphaGO的人机大战炒得热火朝天,给谷歌的AI做了一次大大的广告,可谓风头出尽,大有AI战胜一切的“趋势”.而且,像阿法狗.阿法猫之类的新词不断,成了饭前茶后人们议论的热点.作为一个留学过日 ...

  10. 开发Windows RT平台下的Windows应用商店应用程序的遇到的问题备忘

    1. 关于获取Win8开发者许可证的问题: 有一种情况是:如果系统是Win8.0, 那么如果先激活了windows8(用激活工具), 再安装VS2012,那么在新建项目时会提示获取windows8开发 ...