1、spring简介
Spring是一个分层的 full-stack(一站式)轻量级框架,以Ioc(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切片编程)为内核,使用简单的JavaBean来完成以前只能由EJB(Enterprise Java Beans)完成的工作,取代了臃肿、低效的EJB。Spring致力于JavaEE应用各层的解决方案,是企业应用一站式开发很好的选择,在表现层它提供了Spring MVC以及整合Struts的功能,在业务逻辑层可以管理事务、记录日志等,在持久层可以整合Hibernate、Mybatis等框架。虽然Spring贯穿表现层、业务逻辑层、持久层,但Spring并不是要取代那些已有的优秀框架,而是可以高度开放的与其它优秀框架无缝整合。
- IOC简介
由系统中负责协调各对象的第三方组件,在创建对象的时候通过JavaBean属性(设值方法注入)或者构造函数(构造器注入),设定对象的依赖关系。【注意,是接收者依赖被接收者】。依赖注入会将所依赖的关系自动交给目标,而不是让它自己去获取依赖。也就是说,目标并不需要自己去创建其他类的对象,而是直接接收对象。并且,目标往往是与接口耦合,只要接收的对象实现了某个接口就可以。这样,就能由依赖注入随意更换接收的对象,进一步松耦合。依赖注入的另一个好处是:方便测试。紧耦合的目标难以测试,而通过依赖注入,可以让一个测试类实现耦合接口,然后不用修改代码,就可以让目标接收测试对象了。 - AOP简介
为促使软件系统实现关注点的分离的一项技术,将遍布应用各处的功能分离出来,形成可重用的组件。
横切关注点:
诸如日志、事务管理和安全这样的系统服务,经常融入到自身具有核心业务逻辑的组件中去,把这些系统服务称为横切关注点。
作用:
AOP将横切关注点模块化,在需要的组件中以声明的方式应用。组件只需要关注自身的业务代码,甚至根本不知道那些横切关注点的存在。这样,就避免了横切关注点的功能(代码或是方法调用)在各个组件中反复出现、使得组件变得混乱而复杂的缺陷,确保了POJO的简单性。
2、Spring的优点
- 基于POJO的轻量级和最小侵入性编程
Spring是一种非侵入式(no-invasive)框架,它可以使应用程序代码对框架的依赖最小化。 - 通过依赖注入(DI)和面向接口实现松耦合,方便解耦、简化开发
Spring是一个大工厂,可以将所有 对象的创建、依赖关系的维护 交给Spring容器管理,大大降低了组建之间的耦合。 - 支持AOP,基于切面和惯例进行声明式编程
允许将一些通用任务,比如安全、事务、日志等,进行集中式管理,从而提高程序的复用性。 - 支持声明式事务处理
通过配置就可以完成对事务的管理,无需手动编程。 - 方便整合其它优秀框架
Spring可以与大多数框架无缝整合。 - 测试方便
Spring支持Junit4,可通过注解测试程序,很方便。 - 降低了使用JavaEE API的难度
Spring对JavaEE开发中难用的一些API进行了封装,降低了这些API的使用难度。
3、spring获取对象
3.1 通过ApplicationContext获取bean对象
- 在applicationContext.xml中声明bean对象
<bean name="demo" class="com.jing.Demo"> <!--bean对象属性初始化--> <property name="属性名" value="初始化参数" /> </bean>
- 通过WebApplicationContext获取bean对象
WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext()); Demo demo = (Demo)webApplicationContext.getBean("demo");
3.2 通过配置和注解获取bean对象
-
在applicationContext.xml中声明bean对象
<bean name="demo" class="com.jing.Demo"> <!--bean对象属性初始化--> <property name="属性名" value="初始化参数" /> </bean> <bean name="test" class="com.jing.Test"> <!--bean对象属性初始化--> <property name="属性名" value="初始化参数" /> </bean>
-
使用注解注入bean对象
@Resource(name = "demo") private Demo demo; @Autowired private Test test;
3.3 通过注解获取bean对象
- 在applicationContext.xml中配置bean对象组件扫描器,指定bean类所在包路径,声明包路径下所有bean。
<context:component-scan base-package = "com.jing.entity"/> @Component public class Demo {} @Component("test") public class Test {}
- 使用注解注入bean对象
@Resource(name = "demo") private Demo demo; @Autowired private Test test;
4、spring依赖包关系
4.1 spring核心jar包
-
Core模块:主要包含Spring框架基本的核心工具类,特别重要
-
Beans模块:包含访问配置文件、创建和管理bean以及进行Ioc/DI操作相关的所有类
-
Context模块:构建于Core和Beans模块基础之上,提供了一种类似于JNDI注册器的框架式的对象访问方法
-
Expression Languaga模块:提供了一个强大的表达式语言用于在运行时查询和操纵对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rO1b8XuG-1604890348981)(/images/blog/spring详解/spring-core.png)]
4.2 spring数据库相关依赖
-
JDBC模块:jdbc支持
-
ORM模块:对象关系映射,集成orm框架,如Hibernate,IBatis
-
OXM模块:对象XML映射
-
JMS(Java Message Service)模块:java消息服务
-
Transaction模块:事务控制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h4RE0rhJ-1604890348983)(/images/blog/spring详解/spring-sql.png)]
4.3 springWeb相关依赖
-
spring-web模块:提供了基础的面向web的集成特性,如文件上传
-
spring-webmvc模块:包含了spring 的mvc实现
-
spring-websocket:为web应用提供的高效通信工具
-
spring-web-portlet模块:提供了用于Portlet环境和web-servlet模块的mvc实现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kA0XgNlP-1604890348984)(/images/blog/spring详解/spring-web.png)]
4.4 springAOP相关依赖
-
spring-aop:面向切面编程
-
spring-aspects :Aspects模块提供了对AspectJ(一个面向切面的框架,它展Java语言)的集成支持。
-
spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用服务器
-
spring-instrument-tomcat:针对tomcat的instrument实现
-
spring-messaging:用于构建基于消息的应用程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OMBtcCNo-1604890348986)(/images/blog/spring详解/spring-aop.png)]
4.5 spring测试相关依赖
-
spring-test:spring测试,提供junit与mock测试功能
-
spring-context-support:spring额外支持包,比如邮件服务、视图解析等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QT8iVgJ7-1604890348987)(/images/blog/spring详解/spring-test.png)]