Spring是于2003 年兴起的一个轻量级的Java 开发框架,开源的,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。

JavaEE 项目为何使用Spring框架?
回顾我们之前写过的程序的基本结构:
Dao、DaoImpl、Factory(其中应用到了单模式)、Service、ServiceImpl 、Action(Struts框架里的,相当于MVC的controller)等等。我们是否想过做法有哪些缺点?

使用spring前:
ServiceImpl 中用到了daoImpl 对象,那么 servieImpl 依赖于daoImpl内容, 这是一种依赖关系;Action中用到了serviceImpl,那么action依赖于serviceImpl,他们也有这种依赖关系。

另外,我们在Dao层操作数据时,hibernate 中的session创建,事务的开启和关闭, 都是我们手动在Dao层来管理的,手动调用hibernate处理事务的方法。使用spring后:
我们可以将对象的创建以及对象之间的依赖关系、Hibernate的事务等,都由Spring框架进行操作,这样实现了程序之间的解耦、高内聚。

那这种方便具体体现在哪呢?学Spring我们需要了解几个关键的词语:

IOC:Inversion of Control(控制反转):
  Ioc就是容器控制程序之间的关系,而非传统的程序代码直接控制。所谓控制反转,就是控制权由应用代码中转移到外部容器中,控制权的转移,即所谓的反转。(通俗讲:A类用到了B类中相关方法,此时A依赖于B,那么需要在A类中new实例化B,这是传统的代码控制,但是IOC描述的是控制反转,表示这种A类里面new实例化B对象的权力,不是由A操作的,而是交给Spring实例化B对象,而Spring只需要配置类和类之间依赖关系,告诉程序,A用到了B)

DI: Dependency Injection (依赖性注入):

(通俗讲:由Spring事先实例化好指定某些类,通过spring装配他们之间的依赖关系,例如:A用到B中的方法,此时spring会将实例化好的B对象,依赖注入给A,那么A就可以使用这个对象了,这个意思其实跟IOC差不多)AOP:Aspect-Oriented Programming(面向切面编程):举个例子,比如B类调用某一个方法时,我想统计这个方法执行了多长时间,但我又懒得在程序中每一处调用B类该方法的地方,加入统计时间的代码,于是我就想,可不可以让系统自动地,在所有执行这个B类方法的地方,都调用我的统计时间的代码呢?AOP就可以。spring中,有两种实现方法,一种是针对方法名的,即:在配置类中,或者配置文件中,指明哪个方法名执行时,会触发我自定义的统计时间的方法;另一种是针对注解的,即:自定义一个注解,在你要统计时间的函数上,加上这个注解,然后在配置类中,对这个注解,定义你要执行的统计时间的代码即可。这就是切面。ORM:对象关系映射(hibernate和ibatis框架,将我们的表,对应到vo类,或对应到配置xml文件映射表)

所以,具体的方便,就体现在Spring的核心——IOC。
IOC容器提供了Srping的基本功能,其主要组件是BeanFactory,他是工厂模式的实现,BeanFactory使用控制反转(IOC) 模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开(通俗讲:就是将要实例化的对象,由Srping框架事先完成,BeanFactory中存放的就是所有实例化好的对象)。

我们在代码里,直接用@Resource或@Autowired就能拿到这个bean,这个bean的作用域可以自己设置,有五种,如下图

最后了解一下Srping源文件包的内容:

以3.1.4为例,源文件目录结构如下:
Dist:存放Spring的核心Jar文件、
Docs:存放源码API和spring框架使用的API等;
Projects:存放spring实例;
Src:spring框架的所有源码;

源码怎么看网上教程很多,有兴趣可以看看,我看了一周就放弃了,因为人生苦短,人生无常,我想多做点让自己开心的事。

为什么要用spring相关推荐

  1. spring boot项目 中止运行 最常用的几种方法

    spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...

  2. html+spring boot简单的ajax数据传输实现

    本篇讲解在前后端不分离情况下的html+spring boot的项目数据传输实现 首先,后台我写了三个接口 package com.demo.ajax.controller;import com.de ...

  3. Spring Boot整合Spring Data JPA操作数据

    一. Sping Data JPA 简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 J ...

  4. Spring AOP + Redis解决重复提交的问题

    Spring AOP + Redis解决重复提交的问题 用户在点击操作的时候,可能会连续点击多次,虽然前端可以通过设置按钮的disable的属性来控制按钮不可连续点击,但是如果别人拿到请求进行模拟,依 ...

  5. Spring cloud 微服务docker容器化最佳实践

    Spring cloud 是当下最炙手可热的微服务套件,我们将介绍如何整合Docker容器达到高效快捷的构建发布 采用了dockerfile-maven-plugin插件发布镜像到远程docker主机 ...

  6. ssh(Struts+spring+Hibernate)三大框架整合-简述

    ssh(Struts+spring+Hibernate)三大框架配合使用来开发项目,是目前javaee最流行的开发方式,必须掌握: 注意: 为了稳健起见,每加入一个框架,我们就需要测试一下,必须通过才 ...

  7. Strutsw2与Spring整合流程-简述

    1.      新建WEB工程: 2.      导入struts2开发包,和资源配置文件 ① globalMessages.properties ② struts.properties 3.     ...

  8. spring Bean自动装配

    spring Bean自动装配 自动装配是使用spring满足bean依赖的一种方式. spring会在应用上下文中为某个bean寻找其依赖的bean. spring自动装配需要从两个角度来实现,或者 ...

  9. spring IOC创建对象方式

    spring IOC创建对象方式 通过无参构造来创建 验证方法: 创建实体类: public class User {private String name;public User() {System ...

  10. 第一个spring程序

    第一个spring程序: 第一步:导入jar包. 新建maven项目: <dependency><groupId>org.springframework</groupId ...

最新文章

  1. 爱,催人泪下......
  2. geometry-api-java 学习笔记(八)分割Intersection
  3. python面向对象设计管理系统_python面向对象之单例设计模型
  4. Java高级语法笔记-文件读写(2)
  5. 国产Model 3高性能版规格公布:充电15分钟续航250公里
  6. UI设计灵感|如何简易花繁多的数据?功能仪表盘界面设计来看
  7. select 下拉框的选中项的change事件
  8. IntelliJ IDEA 打包Maven 构建的 Java 项目
  9. cpu的用户态和内核态和内存的用户空间内核空间
  10. 计算机快捷键任务管理器,任务管理器快捷键,小编教你电脑如何打开任务管理器...
  11. 解决Centos7网络连接的问题
  12. 支付宝 支付返回 4000 ,系统繁忙请稍后再试
  13. VMware安裝Ubuntu 16.04.4-server服务器版
  14. cdh 6哈希验证失败解决方法
  15. python gpu加速库比matlab快吗_Python之Unittest和Requests库详解
  16. java 线程耗尽_WebLogic执行线程耗尽解决方案
  17. xp系统怎样启动搜索服务器,XP系统使用搜索功能的三种方式
  18. 赛联区块链培训:Web3的核心要素——区块链、加密资产、智能合约和预言机
  19. JS之键盘事件案例(重要)
  20. 存储过程创建(过程、视图、函数)

热门文章

  1. 备份整合更需要一体机
  2. POI导出Excel2003
  3. 2012年CIO最关心的十大安全问题
  4. 创新也要懂“规矩” 协同软件将走向何方
  5. JS脚本defer的作用
  6. 13muduo_base库源码分析(四)
  7. vs 编译设置obj路径_编译、连接
  8. 数据结构与算法之-----栈的应用(三)
  9. ad导入pcd后网络标号消失_如何将后端BaaS化:业务逻辑的拆与合
  10. Qt ui-setupUi(this)的作用