Spring到底是什么?
一、Spring最根本的使命
Spring框架的目标就是简化Java企业级应用开发,并通过以POJO为基础的编程模型促成良好的编程习惯。那么Spring是如何简化Java开发的呢?,为了降低java开发的复杂性,Spring采用了以下四种关键策略:
1. 基于POJO的轻量级和最小侵入性编程;
(注:POJO(Plain Old Java Object)也叫“简单的Java对象”,是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象;既有无参构造函数,每个字段都有getter和setter的java类)
2. 通过依赖注入DI(Dependency Injection)和面向切面编程AOP(Aspect-Oriented Programming)实现松耦合;
3. 基于切面和惯例进行声明式编程;
4. 通过切面和模板减少样板式代码。
几乎Spring所做的任何事情都可以追溯到上述的一条或多条核心策略。
二、使用Spring框架的好处:
(1)轻量:Spring 是轻量的,基本的版本大约2MB。
(2)控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
(3)面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
(4)容器:Spring 包含并管理应用中对象的生命周期和配置。
(5)MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
(6)事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
(7)异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。
三、Spring容器
在基于Spring的应用中,应用对象生存于Spring容器中,容器负责创建对象、装配他们、配置他们以及管理他们的整个生命周期。
常用的Spring容器:Bean工厂(BeanFactory)应用上下文(ApplicationContext),下面列出三种常用的应用上下文:
1. ClassPathXmlApplicationContext——从类路径下的xml配置文件中加载应用上下文定义,把应用上下文定义文件当做类资源。
2. FileSystemXmlAapplicationContext——读取文件系统下的Xml配置文件并加载上下文定义。
3. XmlWebApplicationContext——读取Web应用下的Xml配置文件并加载上下文定义。
三、装配Bean(即创建应用对象之间的协作关系)
首先,要声明一个Bean,然后注入属性,必要的时候还需对Bean进行初始化和销毁
1、声明Bean
<bean id = "duke" class = "com.springinaction.springido1.Juggler">
</bean>
2、注入属性
(1)通过构造函数注入
<bean id = "duke" class = "com.springinaction.springido1.Juggler"><constructor-arg name="beanBags" value="15" /><constructor-arg name="poem" ref="sonnet29" />
</bean>
(2)通过set注入
<bean id = "duke" class = "com.springinaction.springido1.Juggler"><property name="song" value="Jingle Bells" /><property name="instrument" ref="saxophone" />
</bean>
3、装配集合
Spring提供了4种类型的集合配置元素,
- 装配list类型的值,允许重复
- 装配set类型的值,不允许重复
- 装配map类型的值,名称和值可以是任何类型
- 装配properties类型的值,名称和值必须都是String型
4、初始化和销毁Bean
(1)对每一个bean单独进行初始化和销毁
<bean id = "duke" class = "com.springinaction.springido1.Juggler"init-method="turnOnLights"destory-method="turnOffLights" />
(2)定义上下文所有bean的初始化和销毁
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsddefault-init-method="turnOnLights"default-destroy-method="turnOffLights" />
四、自动装配和自动检测
上面已经讲了如何装配Bean,这个过程全程都是使用xml文件进行配置,但是随着应用的不断发展,我们不得不编写越来越复杂的xml配置,这时,我们就可以使用自动装配和自动检测来减少Xml的配置数量。
1、Spring提供4种自动装配策略
byName——把与bean属性名字相同的bean自动装配到bean的对应属性中,如果没有与属性相匹配的bean,则该属性不进行装配。
byType——把与bean的属性具有相同类型的bean自动装配到bean对应的属性中,如果没有跟属性的类型相匹配的bean,则该属性不被匹配
constructor——把与bean的构造器入参具有相同类型的bean自动装配到bean构造器对应的入参中。
autodetect——首先尝试使用constructor进行自动装配,如果失败,再尝试使用byType进行自动装配
举例:如果使用byName自动装配可见,关于Juggler的instrument属性就被自动注入了,
<bean id = "duke" class = "com.springinaction.springido1.Juggler" autowire="byName"><property name="song" value="Jingle Bells" />
</bean>
<bean id = "instrument" class="com.springinaction.springido1.Saxophone">
2、使用注解装配
(1)自动装配
需要配置元素
@autowired
(2)自动检测
需要配置base-package=”包名”来代替
@Component/@Controller/@Repository/@Service
Spring到底是什么?相关推荐
- spring 扫描所有_SpringBoot和Spring到底有没有本质的不同?
现在的Spring相关开发都是基于SpringBoot的. 最后在打包时可以把所有依赖的jar包都打进去,构成一个独立的可执行的jar包.如下图: 使用java -jar命令就可以运行这个独立的jar ...
- Spring到底是什么
一.spring到底是什么 Spring 是分层的Java SE/EE应用 轻量级开源框架,ioc (控制翻转)和AOP (面向切面编程)为内核,能够整合开源世界众多著名的第三方框架和类库,逐渐成为使 ...
- 我们应聘BAT等互联网公司,关于Spring到底需要掌握什么?
戳蓝字"CSDN云计算"关注我们哦! 技术头条:干货.简洁.多维全面.更多云计算精华知识尽在眼前,get要点.solve难题,统统不在话下! 阅读本文大概需要 3 分钟. 之前分享 ...
- Spring?Spring?Spring到底是啥?
前言 不是开发出身,现在的事情也杂,做过个项目对Spring就是照着用,没有系统了解过. 最近在看框架方面的内容,就顺便看看了Spring. 看了一天,对Spring是什么?IoC.依赖注入基本搞明白 ...
- spring到底是什么!新手必看
Spring简介: 简介:功能强大的基于javaBeans的配置管理,它使组织应用变得容易和迅速.你的代码中不再充斥着单例垃圾,也不再有麻烦的属性文件.取而代之的一致和幽雅的方法的应用. JDBC抽象 ...
- Spring越来越强,而我们越来越快餐!离开了Spring,居然API都写不出来了! 程序猿DD...
点击关注公众号,Java干货及时送达 来源 | cnblogs.com/lonely-wolf/p/14127957.html 随着 Spring 的崛起以及其功能的完善,现在可能绝大部分项目的开发都 ...
- 一文带你看懂Spring事务!
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 前言 Spring事务管理我相信大家都用得很多,但可能仅仅局限于一个@Transactiona ...
- [Spring 深度解析]第2章 Spring基础
第2章 ◄Spring基础► 在上一章节中,我们学习了Java的注解与反射,在这一章节我们将了解一下Spring框架,并学习Spring框架中重要的编程思想控制反转(IOC).面向切面编程(AOP ...
- 一篇复习一下Spring和SpringMVC基本概念
什么是Spring,为什么你要学习spring? 你第一次接触spring框架是在什么时候?相信很多人和我一样,第一次了解spring都不是做项目的时候用到,而是在网上看到或者是听到过一个叫做spri ...
最新文章
- 走进欧洲、澳洲和加拿大21000个零售网点,比特币现金(BCH)有何潜力?
- 利用多线程解决多业务不同定时区间歇触发问题的一种方法
- javascript中对变量类型的判断
- oracle 拼接sql 日期,动态SQL对日期处理注意事项
- 【java】简介(一)
- pytorch 入门学习 MSE
- cesium 加载bim模型_BIM+GIS跨界融合,打造智能未来新利器
- 台电tbook10s官方固件_台电TbooK 10 S (E5N5)-双系统平板电脑固件
- NB-IoT移远BC95使用小结
- 计算机审计风险背景,计算机审计风险探究
- 【路由器无线桥接的步骤实现】水星路由器MW150R作为副路由器无线桥接TP-Link主路由器
- Android OTA 差分包制作
- masm 16位汇编语法
- Ansys Lumerical | 铌酸锂热调制波导仿真
- mac mysql.sock_Mac OS 下 mysql 找不到 mysql.sock 的解决过程
- Please specify a program using absolute path or make sure the program is available in your PATH syst
- 长铗:信息与计算力的大爆炸可能会导致超级智能
- 读书笔记-人月神话12
- 2022 年初学者如何成为 iOS 开发者指南
- [附源码]SSM计算机毕业设计小区物业管理系统JAVA
热门文章
- 秉持H2H理念,58同城如何在移动互联网时×××拓市场
- Android中Glide加载Https图片失败的解决方案(记录)
- 程序猿生存指南-31 实习招聘(中)
- multi-view human pose estimation相关项目配置经验
- 数据中台 第9章 数据服务体系建设,数据赋能
- 【智能车Code review】——拐点的寻找
- 区块链基础设施纵览:存储、计算和通信
- 杨式太极拳腿功练习方法
- 平方和:在1-40中只要数字中含有2,0,1,9的数字一共有28个,他们的和是574,平方和是14362。请问1-2019中,所有这样的输的平方和是多少?
- 第六大晶圆代工厂商2021净利润大增593.3%