<svg xmlns="http://www.w3.org/2000/svg" style="display: none"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0)"></path> </svg>
讯享网
总结:为什么要使用Spring?
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
- 模块 说明
- 核心容器Spring Core 核心容器,提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC)模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开。
- Spring Context Spring上下文,是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
- Spring AOP 通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中。可以很容易地使 Spring框架管理的任何对象支持AOP。Spring AOP模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,就可以将声明性事务管理集成到应用程序中。
- Spring DAO JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
- Spring ORM Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
- Spring Web Web上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以Spring 框架支持与 Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
- Spring MVC框架MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
Spring 框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。
- 核心组件:
- BeanFactory Spring内部使用,创建bean的工厂
- ApplicationContext 外部应用程序调用,也成为spring容器的上下文
- IoC控制反转
讯享网
- DI依赖注入
Dependency Injection 松耦合方式实现对象直接的依赖 - AOP面向切面编程 补充java面向对象的不足
- org.springframework.core 核心工具包,其他包依赖此包
- org.springframework.beans 核心,包括:配置文件,创建和管理bean等
- org.springframework.aop 面向切面编程,提供AOP的实现
- org.springframework.context 提供IoC功能上的扩展服务,此外还提供许多企业级服务的支持,邮件、任务调度、JNDI定位、EJB集成、远程访问、缓存以及多种视图层框架的支持
- org.springframework.web.mvc 包含SpringMVC应用开发时所需的核心类
- org.springframework.transaction 为JDBC、Hibernate、JDO、JPA提供一致的声明式和编程式事务管理
- org.springframework.web 包含Web应用开发时所需支持类
- org.springframework.aspects 提供对AspectJ框架的支持
- org.springframework.test 对junit等测试框架的简单封装
- org.springframework.asm 3.0后提供自己独立的,反编译
- org.springframework.context.support Context的扩展支持,用于mvc方面
- org.springframework.expression Spring表达式语言
- org.springframework.instument 对服务器的代理接口
- org.springframework.jdbc 对jdbc的简单封装
- org.springframework.jms 为简化jms api的使用而做的简单封装
- org.springframework.orm 整合第三方orm,如hibernate/mybatis
- org.springframework.web.servlet 增强servlet
(spring容器是spring中的一个核心模块,用于管理对象)在此之前,当需要对象时,通常是利用new关键字创建一个对象:
而使用spring框架,对象的创建可以交给spring来做:
讯享网
只需要将类提前配置在spring配置文件中,就可以将对象的创建交给spring容器,当需要对象时,不需要自己创建,而是直接通过spring获取即可,省去了new对象,可以降低代码之间的耦合性。
2.2.1 创建Maven工程,引入spring相关依赖包
1、创建Maven—Java工程
2、引入spring的jar包:在maven工程的pom.xml文件中添加如下配置:
2.2.2 创建spring核心配置文件—applicationContext.xml
1、在工程的java/resources目录下,创建applicationContext.xml文件:
2、在applicationContext.xml中添加如下内容(下面的配置不需要掌握,只是一个文件格式):
讯享网
3、将Hello对象的创建交给Spring容器来管理,在核心配置文件中添加如下配置:
讯享网
2.2.4 创建测试类—TestIOC,创建Hello对象,并调用其中的方法。
这就是spring框架的IOC——控制反转。之前我们自己new对象,例如:
讯享网
而现在,变成由一个初始化的xml配置文件来创建,也就是由spring容器来创建。
当程序运行,spring开始工作后,会加载整个xml核心配置文件,读取到,获取到class属性中类的全路径,利用反射创建该类的对象。
- singleton:单实例,是默认值。这个作用域标识的对象具备全局唯一性。
当把一个 bean 定义设置scope为singleton作用域时,那么Spring IOC容器只会创建该bean定义的唯一实例。也就是说,整个Spring IOC容器中只会创建当前类的唯一一个对象。
这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都 将返回被缓存的、唯一的这个对象实例。
singleton负责对象的创建、初始化、销毁。
- prototype:多实例。这个作用域标识的对象每次获取都会创建新的对象。
当把一个 bean 定义设置scope为singleton作用域时,Spring IOC容器会在每一次获取当前Bean时,都会产生一个新的Bean实例(相当于new的操作)
prototype只负责对象的创建和初始化,不负责销毁。
讯享网
多例:

讯享网
3、将applicationContext.xml中,Hello类bean标签的scope值设置为singleton:
4、将applicationContext.xml中,Hello类bean标签的scope值修改为prototype
讯享网
或者:
讯享网
4.2.1 普通属性注入
需求:通过Spring创建User实例,并为User实例的name和age属性(普通属性)赋值
1、创建User类,声明name和age属性,并添加对应的setter和getter方法,以及toString方法
2、在applicationContext.xml中声明User类的bean实例
讯享网
3、创建测试类—TestDI
由于这里没有为User对象的属性赋值,所以此时运行测试,结果为:

4、修改applicationContext.xml中User实例的声明,为User实例注入属性
讯享网
4.2.2 对象属性注入
需求:通过Spring创建User实例,并为User对象的userInfo属性(对象属性)赋值
1、创建UserInfo类
2、在applicationContext.xml中,声明UserInfo类的bean实例
讯享网
3、修改User类,声明userInfo属性,添加对应的setter和getter方法,并重新生成toString方法
4、在applicationContext.xml中,将UserInfo对象作为值,赋值给User对象的userInfo属性
讯享网
4.3 构造方法注入
2、修改applicationContext.xml文件,将set方式修改为构造方法注入。
讯享网
2、运行测试类TestDI,结果为:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/171145.html