Spring框架介绍

Spring是通过注解的方式来表明相应对象的作用的,例如:@Controller
什么是Spring?它有哪些好处?
spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架
它主要是为了解决企业应用开发的复杂性而诞生的
- 目的:解决企业级应用开发的复杂性
- 功能:使用基本的JavaBean代替EJB(什么是EJB)
- 范围:任何Java应用
就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置内部通过反射去动态的组装对象)
Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,根据xml Spring的配置文件来动态的创建对象,和调用对象里的方法的。
Spring是潜在一站式解决方案。
Spring本身存在的优点
- 低侵入式设计,代码污染极低
- Write Once,Run Anywhere
- DI有效的降低了耦合度
- AOP提供了通用的任务的集中管理
- ORM和DAO简化了对数据库的访问
- 高度开放性,并不强制(贯穿于变现层,业务层,持久层)
Spring的优点给开发带来的好处
- 可以有效组织中间层对象
- 使用同一的配置文件
- 促进良好的编程习惯,减少编程代价
- 易于单元测试。(一Spring基本组就是JavaBean,二提供了对Juit的支持)
- 使EJB成为一种备选
- 为数据存取提供了一致性的框架
理解AOP
- Aspect Oriented Programming:面向切面编程
- 一个组件A,不关心其他常用的服务组件B,但是这个组件A使用B的时候,不是组件A自身去调用,
而是通过配置等其他方式,列如Spring中可以通过XML配置文件。这样就使得A压根就不需要
知道服务组件B是怎么样的,爱存在不存在,爱怎么样存在都与A无关。A只需要关心自己的业
务逻辑,具体A使用B的时候,配置文件去做,与具体的A组件无关。
继续探讨AOP切面编程

理解IOC
- Inversion of Control:控制反转
- IOC(控制反转):说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理。
- DI(依赖注入):说的是创建对象实例时,为这个对象注入属性值或其他对象实例后,侧重于实现。
继续探讨IOC依赖注入

所有变量的初始化不是通过自己来负责的,而是通过依赖注入的概念。Spring框架只要你定义好了一些service,它自己就能把这些处理出来。
- 在service文件夹下定义好相应的service类,用@Service注释
- 在其他地方,比如controller文件夹中的类声明service中弄好的类的对象时,就可以直接采用“类名+对象名”的方式来生成对象,而不用new操作。用@Autowired注释。
即在service中声明类。在要用的地方依赖注入就可以了。
这样做有什么好处?
如果大家在一起写代码,你可以跟一个人说你给我写个什么样的service,然后我需要什么接口,等他写完后,我只要在我想用的地方直接使用就行了,不用担心怎么初始化,直接在用的地方依赖注入就可以了(直接就拥有了相关对象的句柄)。即该方式的最大好处就是:无需关心变量的初始化,只需要通过注解的方式来表示说这是来自一个秉持(不知道是什么)的对象的初始化就可以了。
总结
它的核心是轻量级的IOC容器,它的目标是为J2EE应用提供了全方位的整合框架,在Spring框架
下实现多个子框架的组合,这些子框架之间可以彼此独立,也可以使用其他的框架方案加以代替。
Spring希望为企业应用提供一站式的解决方案(建议:如果是高并发大型项目,慎重使用,
因为项目大量使用反射机制,必定会影响性能。)
采用MVC模式时的目录结构
模型(model)-视图(view)-控制器(controller)
下图是依赖于Spring框架的项目大概的树形结构:

- model文件夹用来存放模型
- controller文件夹用来存放控制器
- 视图则存放在templates模板文件夹中
Spring Boot
参考这篇文章Spring Boot 入门
Spring Boot并不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。
从最根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目的构建系统所使用
Spring Boot特点:
- 创建独立的Spring应用程序
- 嵌入的Tomcat,无需部署WAR文件
- 简化Maven配置
- 自动配置Spring
- 提供生产就绪型功能,如指标,健康检查和外部配置
- 绝对没有代码生成和对XML没有要求配置