Spring框架是一个开源的Java平台,用于构建企业级应用程序。它由Rod Johnson在2002年首次提出并创建,旨在解决企业级编程开发中的复杂性,实现敏捷开发。
一,概述
- 目的:Spring框架的目的是简化Java企业级应用的开发难度和开发周期。通过提供一系列的组件和服务,它使得开发者能够更专注于业务逻辑的实现,而不是底层的技术细节。
- 特点:Spring框架具有低侵入式设计、轻量级、松耦合、模块化设计等特点。它支持控制反转(IoC)和面向切面编程(AOP),提供了丰富的企业级服务,如事务管理、安全控制、数据访问等。
二,核心模块
Spring框架包含多个核心模块,每个模块都提供了特定的功能和服务。以下是一些主要的模块:
- Spring Core:Spring框架的基础,提供了IoC容器的实现。IoC容器负责对象的创建、初始化和依赖注入,降低了组件之间的耦合度。
- Spring MVC:Web应用程序开发模块,提供了一种基于模型-视图-控制器(MVC)的架构,用于开发灵活和可扩展的Web应用程序。
- Spring Data:数据访问模块,简化了数据库访问的方式。它支持多种数据访问技术,包括关系型数据库、NoSQL数据库和搜索引擎。
- Spring Security:安全性模块,提供了基于角色的访问控制机制,用于保护应用程序的资源和数据。
- Spring AOP:面向切面编程模块,允许开发者将横切关注点(如日志记录、性能监控等)从业务逻辑中分离出来,实现模块化。
- Spring Boot:快速开发模块,通过自动配置和约定优于配置的原则,简化了Spring应用程序的构建和部署过程。
三,优势
Spring框架之所以广受欢迎,主要得益于其以下优势:
- 简化开发:通过IoC容器和AOP,Spring框架降低了组件之间的耦合度,简化了开发过程。
- 提高可测试性:Spring框架支持依赖注入和面向切面编程,使得测试更加容易和高效。
- 松耦合:Spring框架以松耦合的方式构建应用程序,使得应用程序更加灵活和易于维护。
- 模块化设计:Spring框架采用模块化的设计,开发者可以根据实际需求选择和使用相应的模块。
四,Maven导入spring框架核心jar包
<!-- spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
五,编写spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
</beans>
六,IOC控制反转
读作
“反转控制”(Inverse of Control)
更好理解,不是什么技术,而是一种
设计思想
,就是
将原本在程序中手动创建对象的控制权,交由 Spring 框架来
管理。
IOC 容器负责对象的实例化、对象的初始化,对象和对象之间依赖关系、
对象的销毁、对外提供对象的查找等操作,对象的整个生命周期都是由容器来
控制。
我们需要使用的对象都由 ioc 容器进行管理,不需要我们去手动通过 new
的方式去创建对象,由 ioc 容器直接帮我们组装好,当我们需要使用的时候直
接从 ioc 容器中直接获取就可以了。
正控:
若要使用某个对象,需要
自己去负责对象的创建
反控:
若要使用某个对象,只需要
从 Spring 容器中获取需要使用的对象,
不关心对象的创建过程
,也就是把
创建对象的控制权反转给了 Spring 框架.
基于 xml 配置方式
bean 配置需要 spring 管理的类
id 生成的对象名
class 全类名
name 对象别名,可以为多个
scope:
singleton(默认值):在 Spring 中只存在一个 bean 实例, 单例模式.
prototype:原型 getBean()的时候都会 new Bean()
request: 每 次 http 请 求 都 会 创 建 一 个
bean, 仅 用 于
WebApplicationContext 环境
Xml 配置方式依赖注入【DI:Dependency Injection】
指 Spring 创建对象的过程中,
将对象依赖属性(简单值,集合,对象)通
过配置设置给该对象
。
实现 IOC 需要 DI 做支持
注入的方式:
set 方法注入
构造方法注入
七,基于 xml 配置方式
name 对象别名,可以为多个
scope:
singleton(默认值):在 Spring 中只存在一个 bean 实例, 单例模式.
prototype:原型 getBean()的时候都会 new Bean()
request: 每 次 http 请 求 都 会 创 建 一 个
bean, 仅 用 于
WebApplicationContext 环境
Xml 配置方式依赖注入【DI:Dependency Injection】
指 Spring 创建对象的过程中,
将对象依赖属性(简单值,集合,对象)通
过配置设置给该对象
。
实现 IOC 需要 DI 做支持
注入的方式:
set 方法注入
构造方法注入
八,注解方式实现
开启注解扫描
<context:component-scan base-package="包名"> </context:component-scan>
注解创建对象
@Component(value=“
user”)等同于 <bean id=“
user” class=“”></bean>
@Service
@Repository
以上注解都可以实现创建对象功能,只是为了后续扩展功能,在不同的层使用不
同的注解标记
@Scope(value=“prototype”) 原型
@Scope(value=“ singleton ”) 单例
九,注解方式注入【DI:Dependency Injection】
@Autowired
@Autowired 是 Spring 提供的注解,可以写在字段和 setter 方法上。如果写在
字段上,那么就不需要再写 setter 方法。默认情况下它要求依赖对象必须存在,
如果允许 null 值,可以设置它的 required 属性为 false。
byType 自动注入
该注解默认使用按类型自动装配 Bean 的方式。
byName 自动注入
如果我们想使用按照名称(byName)来装配,可以结合@Qualifier 注解一起
使用。
需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的
value 属性用于指定要匹配的 Bean 的 id 值。
JDK 注解@Resource 自动注入
S
pring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以按名
称匹配 Bean,也可以按类型匹配 Bean。默认按照 ByName 自动注入
byName 注入引用类型属性
@Resource 注解指定其 name 属性,则 name 的值即为按照名称进行匹配
的 Bean 的 id。
十,注解与 XML 的对比
注解优点:
方便,直观,高效(代码少,没有配置文件的书写那么复杂)。
注解缺点:
以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。
xml 优点是:
配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重
启服务器即可将新的配置加载。
xml 的缺点是:
编写麻烦,效率低,大型项目过于复杂。
十一,Spring 数据访问层管理
Spring 是个一站式框架:Spring 自身也提供了 web 层的 SpringWeb 和 持
久层的 Spring JdbcTemplate。
开发步骤
下载 Spring jdbc 数据访问层 jar 包
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!-- 阿里数据源 链接管理-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
导入属性文件
<context:property-placeholder location="config.properties"/>
管理数据源对象
spring 管理数据库链接对象
本次采用阿里巴巴数据库连接管理对象
<
bean id
="dataSource"class="com.alibaba.druid.pool.DruidDataSource">
<
property name
="
driverClassName
"
value
=""></
property
>
<
property
name
="url"
value
=""
></
property
>
<
property
name
="username"
value
=""
></
property
>
<
property
name
="password"
value
=""
></
property
>
<
property
name
="initialSize"
value
="10"
></
property
><!--初始化连接数量-->
<
property
name
="maxActive"
value
="20"
></
property
><!--最大连接数量-->
</
bean
>
十二,Spring 集成 Mybatis
Spring 集成 Mybatis 其核心是将 SqlSessionFactory 交由 Spring 管理,并由
Spring 管理对 dao 接口的代理实现。
导入 mybatis jar 包
Spring 结合 mybatis 插件包
<!-- spring集成mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
配置 sqlSessionFactory
<
bean
id
="sqlSessionFactory"
class
="org.mybatis.spring.SqlSessionFactoryBean"
>
<
property
name
="dataSource"
ref
="dataSource"
></
property
>
<
property
name
="configLocation"
value
="classpath:mybatis-config.xml"
></
property
>
<
property
name
="mapperLocations"
value
="classpath:mappers/*Mapper.xml"
>
</
property
>
</
bean
>
指定生成接口代理
<
bean
id
="mapperFactory"
class
="org.mybatis.spring.mapper.MapperScannerConfigurer"
>
<
property
name
="basePackage"
value
="com.ffyc.ssm.dao"
></
property
>
<
property
name
="sqlSessionFactoryBeanName"
value
="sqlSessionFactory"
>
</
property
>
</
bean
>
在 service 中注入 Dao 代理接口,此接口有 Spring 代理实现