Spring框架入门教程(知识点齐全,最好用的学习笔记!!!)

简介: 内容涵盖了实际工作中可能用到的几乎所有知识点。为以后的学习打下坚实的基础。

     在实际项目开发过程中,将服务器分为三层:表现层(Web)、业务逻辑层(Service)、持久层(Dao),在目前主流的开发框架中,Spring对每一层都有独到的处理方式,如在表现层在表现层提供了与 Struts2 框架的整合,持久层中提供了jdbcTemplate技术,在业务逻辑层提供了事物管理和日志记录等。 下面让我们进入spring框架的世界。


相关视频推荐: https://www.bilibili.com/video/BV1nz4y1d7uy


视频简介:

本套Java视频教程主要讲解了Spring4在SSM框架中的使用及运用方式。本套Java视频教程内容涵盖了实际工作中可能用到的几乎所有知识点。为以后的学习打下坚实的基础。


一、Spring框架的组成

图片.png

图片.png

  • 轻量级J2EE应用开发框架
  • 主要构成:依赖注入容器,AOP实现、DAO/ORM支持、Web集成
  • Core封装包:框架的最基础部分,提供IoC依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许从成程序逻辑中分分离出依赖关系和配置。
  • 构建与Core封装包基础上的Context封装包,提供了一种框架式的对象访问方法,有些像JNDI注册器。Context封装包的特性来自于Beans封装包,并添加了对国际化(I18N)的支持(如资源绑定)时间传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器
  • DAO提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。并且,JDBC封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJO都适用。
  • ORM封装包提供了常用的“对象-关系”映射API的集成层。利用ORM封装包,可以混合使用所有Spring提供的特性进行”对象-关系“映射。如简单声明性事务管理。
  • Spring的AOP封装包提供了符合AOP(Aspect—oriented-programming)面向切面编程。
  • Spring的Web包提供了基础的针对web开发的集成特性,当与WebWork或struts一起使用Spring时,这个包可以与其他框架结合。
  • Spring中的MVC封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架提供了一种清晰的分离模型。Spring的MVC框架提供了一种清晰的分离模型,在领域模型代码和web form之间,并且还可以借助Spring框架的其他特性。


二、Spring框架的作用

典型的应用程序开发过程中,开发人员使用Struts、WebWork等应用程序框架开发前端程序,而采用JDO、Hibernate等持久层框架进行数据库操作,使用Spring IoC容器(控制反转)对整个系统中的组件进行配置和管理。

2.1、IoC

控制反转(Inversion of Control),指的是将创痛编程方式中的程序依赖关系的控制权从程序内部转移到程序外部,允许程序员从程序逻辑中分离出对具体实现的依赖和管理。

控制反转也体现了”面向接口编程”、分离调用与实现的设计思想。

2.2、依赖注入

由容器动态地将某种依赖关系注入到组件之间。

控制反转也称为”依赖注入“(Dependency Injection DI)

图片.png

IoC/DI示例:

依赖注入是Java编程思想中”面向接口编程“的体现,因此在设计程序是,对于程序所依赖的组件往往以忌口的形式出现,而不直接使用具体的实现类:

//设计接口
public interface PersonLogic{
String sysHello();
}
//使用接口
public class Action{
public void execute(){
//依赖接口的某个实现类的实例来完成处理
system.out.println(person.sayHello());
}
}

.3、IoC/DI的实现方式

2.3.1、Type1 接口注入

方法的调用者通过方法参数提供一个接口的实现类(所依赖的组件)

//在方法参数中使用组件接口
public class DemoAction{
public void execute(PersonLogic person){
//Action的功能实现依赖于通过方法参数传递的Logic对象
system.out.println(person.sayHello());
}
}
//调用方法时,从外部注入所依赖的组件
DemoAction action = new DemoAction();
PersonLogic person = new PersonLogicEnImpl();
action.execure(person);
2.3.2、Type2设值注入

借鉴JavaBean的设计方法,把业务处理对象所以来的其它组件通过setter方法传递进来

//所依赖的组件以属性的形式出现,并提供相应的getter、setter方法
public class DemoAction{
private PersonLogic person;
//通过设值注入所依赖的组件
public void setPerson(PersonLogic person){
this.person = person;
}
....
//调用方法时通过setter方法从外部注入所依赖的组件
DemoAction action = new DemoAction();
PersonLogic person = new PersonLogicCnImpl();
action.setPerson(person);
action.execute();
2.3.3、Type3 构造参数注入

在业务处理对象初始化的阶段,就将所以来的其他组件通过构造方法设置好;在初始化阶段完成之后,就可以得到一个完整的业务对象直接使用。

//所依赖的组件以属性的形式出现,并在构造方法中提供
public class DemoAction{
//所依赖的组件以属性的形式出现
private PersonLogic person;
//通过构造方法在初始化阶段获得所依赖的组件
public DemoActionType3(PersonLogic person){
this.person = person;
}
//调用方法时通过构造方法从外部注入所依赖的组件
PersonLogic person = new PersonLogicCnImpl();
DemoAction action = new DemoAction(person);
action.execute();

2.4 依赖注入实现方式的比较

2.4.1、Type1 接口注入

历史悠久,在大量的容器、框架设计中都有采用,例如servlet,struts1等

灵活性、易用性不足,目前依赖注入模式的开发中Type2、Type3成为主流

2.4.2、Type2 设值注入

近似于传统的javabean模式,对于程序员来说,通过setter方法来设置依赖关系更加直观、自然

避免了庞大臃肿的构造函数,特别是在依赖关系复杂的情况下不用在构造函数中出现众多的构造函数,在编码中更为简洁

在某些框架中,对构造函数有一定的限制(往往要求提供一个默认的构造函数)这时Type3方式就显得无能为力。

2.4.3、Type3 构造参数注入

完全符合”在构造期即创建一个完整的、合法的对象“的java设计原则

所有的依赖关系在构造方法中集中体现

由于没有setter方法能改变依赖关系,所有组建在创建之后处于相对”稳定“状态。同时在一定程度上也对外界屏蔽了依赖关系的细节。

对于复杂的依赖关系,可以通过构造方法决定依赖关系注入的顺序。

三、应用

3.1、所需包

图片.png

3.2、applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="fruit" class="com.it.spring.type1.Banana"></bean>
  <bean id="song2" class="com.it.spring.type2.Song">
    <property name="songName" value="小苹果"></property>
  </bean>
  <bean id="sing" class="com.it.spring.type2.Sing">
    <property name="song" ref="song2"></property>
  </bean>
  <bean id="song3" class="com.it.spring.type3.Song">
    <property name="name" value="小苹果"></property>
  </bean>
  <bean id="sing3" class="com.it.spring.type3.Sing">
    <constructor-arg index="0" name="song" ref="song3"></constructor-arg>
  </bean>
</beans>

四、总结

  • Spring框架的产生
  • Spring框架由依赖注入容器、AOP实现,DAO/ORM支持、Web集成等多个部分组成。
  • Spring在应用程序中对整个应用系统中的组件进行配置和管理
  • IoC将传统编程方式中的程序依赖关系的控制权从程序内部转移到程序外部,从程序逻辑中分离出对具体实现的依赖和管理。
  • DI的实现方式中,接口注入出现最早,但因为灵活性、易用性方面的不足,IoC领域不再是主流选择。
  • Type2设值注入和Type3构造参数注入都是目前比较主流的做法,但是由于实现方法的不同,在运用中也有各自的优点。


刚开学,先掌握这些,因为是基础,后面你会越来越熟练!!!

相关文章
|
7天前
|
缓存 Java 开发工具
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
三级缓存是Spring框架里,一个经典的技术点,它很好地解决了循环依赖的问题,也是很多面试中会被问到的问题,本文从源码入手,详细剖析Spring三级缓存的来龙去脉。
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
|
7天前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
2天前
|
Java 应用服务中间件 开发者
深入探索并实践Spring Boot框架
深入探索并实践Spring Boot框架
13 2
|
2天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
11天前
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
50 1
|
15天前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
44 2
|
16天前
|
Cloud Native 安全 Java
Micronaut对决Spring Boot:谁是微服务领域的王者?揭秘两者优劣,选对框架至关重要!
【9月更文挑战第5天】近年来,微服务架构备受关注,Micronaut和Spring Boot成为热门选择。Micronaut由OCI开发,基于注解的依赖注入,内置多种特性,轻量级且启动迅速;Spring Boot则简化了Spring应用开发,拥有丰富的生态支持。选择框架需考虑项目需求、团队经验、性能要求及社区支持等因素。希望本文能帮助您选择合适的微服务框架,助力您的软件开发项目取得成功!
64 2
|
Java 数据库连接 索引
|
1月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决