Spring框架

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包

XML 复制代码
<!-- spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>

五,编写spring配置文件

XML 复制代码
<?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 方法注入
构造方法注入

八,注解方式实现

开启注解扫描

XML 复制代码
<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 包

XML 复制代码
<!-- 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 插件包

XML 复制代码
<!-- 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 代理实现

相关推荐
lee24197312 分钟前
POI生成Excel文件增加数据验证(下拉序列)
java·excel
Java__攻城狮14 分钟前
java设计模式(持续更新中)
java·开发语言·设计模式
小光学长19 分钟前
基于vue框架的宠物爱好者交流网站的设计与实现p2653(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
数据库
努力奋斗的小涛涛20 分钟前
activiti第五步流程图定义会审并设置串行用户任务
java·流程图
铁打的阿秀25 分钟前
okhttp 报java.lang.IllegalStateException: closed
java·开发语言·okhttp
longlongqin27 分钟前
redis常见的数据类型?
数据库·redis·缓存
布说在见37 分钟前
负载均衡:从理论到实践 ---day04
java·运维·负载均衡
程序和我有一个能跑就行。39 分钟前
【数据库】MySQL-基础篇-多表查询
数据库·sql·多表查询
星河路漫漫40 分钟前
JavaScript高阶面试题:(第三天)
java·javascript·面试
`北极星1 小时前
应用程序已被 Java 安全阻止:Java 安全中的添加的例外站点如何对所有用户生效
java·开发语言·安全