Spring教程(史上最全图文详解)

Spring教程(史上最全图文详解)-mikechen

Spring简介

Spring 是一个轻量级的Java 开发框架,Spring主要用来开发Java应用,Spring 可以被看作是一个大型工厂。

Spring工厂的作用就是生产和管理 Spring 容器中的Bean,控制反转Spring IOC和面向切面编程Spring AOP,Spring 致力于Java应用各层的解决方案。

 

Spring优点

Spring优点主要表现会如下4点:

Spring教程(史上最全图文详解)-mikechen

1)方便解耦

Spring的主要作用就是为代码解耦,降低代码间的耦合度。

Spring 提供了IOC控制反转,由容器管理对象,对象的依赖关系,现在由容器完成。

 

2)AOP 编程的支持

通过 Spring 提供的 AOP功能,方便进行面向切面的编程。

 

3)支持声明式事务处理

通过配置就可以完成对事务的管理,无需手动编程,让开发人员可以从繁杂的事务管理代码中解脱出来,从而提高开发效率和质量。

 

4)方便集成各种优秀框架

Spring 不排斥各种优秀的开源框架,相反 Spring 可以降低各种框架的使用难度,Spring 提供了对各种优秀框架,比如:Struts、Hibernate、MyBatis、SpringBoot等的直接支持。

 

Spring整体结构

Spring体系结构:七大核心模块详解

Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,MVC,WEB,Context。

Spring教程(史上最全图文详解)-mikechen

 

Spring IOC

Spring IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。

传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试,有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,如下图所示:
Spring教程(史上最全图文详解)-mikechen

上图引入了IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器。

所以,IOC借助于“第三方”实现具有依赖关系的对象之间的解耦,使程序更优良。

 

Spring依赖注入

Spring依赖注入方式详解(3种常用注入方式)

Spring的依赖注入,我们一般使用@Autowired注解来完成,关于依赖注入一般有三种方式:

属性注入、构造器注入、setter方法注入:

1.属性注入

属性注入是大家最为常见也是使用最多的一种注入方式了,代码如下:

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;


    //...
}

 

2.Set注入

这种注入方式通过set方法完成注入,所以在类中必须要给属性设定set方法。

@Service
public class UserServiceImpl implements UserService {
    private UserMapper userMapper;
    @Autowired
    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }
}

 

3.构造器注入

构造器注入是官方推荐的方式,如下:

@Service
public class UserServiceImpl implements UserService {
    private final UserMapper userMapper;
    
    @Autowired
    public UserServiceImpl(UserMapper userMapper) {
        this.userMapper = userMapper;
    }
}

 

Spring注解

Spring注解(9种最常用使用详解)

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:

1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大,如果按需求分开.xml文件,那么.xml文件又会非常多。

2、在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率。

为了解决这两个问题,Spring引入了注解,通过”@XXX”的方式,比如:@Autowired、@Required等等,让注解与Java Bean紧密结合。

既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。

 

Spring事务

Spring事务详解,看这篇就够了!

Spring 本身并不实现事务,Spring事务 的本质 还是 底层数据库 对事务的支持,没有 数据库 事务的支持,Spring事务就不会生效。

Spring 事务 提供一套抽象的事务管理,并且结合 Spring IOCSpring AOP,简化了应用程序使用数据库事务。

Spring事务有两种方式:编程式事务管理和声明式事务管理,这两种方式。

Spring教程(史上最全图文详解)-mikechen

1.编程式事务管理

Spring框架提供了两种编程式事务方式:

  • 使用TransactionTemplate
  • 使用PlatformTransactionManager

Spring团队通常建议使用TransactionTemplate进行程序化事务管理。

TransactionTemplate采用与其他spring模板相同的方法,它使用一种回调方法,使应用程序代码可以处理获取和释放事务资源,让开发人员更加专注于业务逻辑。

@Autowired
private TransactionTemplate transactionTemplate;
public void testTransaction() {

        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {

                try {

                    // ....  业务代码
                } catch (Exception e){
                    //回滚
                    transactionStatus.setRollbackOnly();
                }

            }
        });
}

2. 声明式事务

声明式事务不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明,或通过基于@Transactional注解的方式,便可以将事务规则应用到业务逻辑中。

如下所示,只需加入@Transactional注解的方式:

@Transaction
public void insert(String userName){
    this.jdbcTemplate.update("insert into t_user (name) values (?)", userName);
}

 

Spring生命周期

Spring生命周期详解(4大步骤详细图解)

Spring生命周期主要分为以下4大阶段实例化、属性赋值、初始化阶段、销毁阶段。

Spring教程(史上最全图文详解)-mikechen

 

第一步:实例化阶段

Spring教程(史上最全图文详解)-mikechen

第二步:Bean属性赋值

Spring教程(史上最全图文详解)-mikechen

第三步:初始化阶段

Spring教程(史上最全图文详解)-mikechen

第四步:销毁阶段

Spring教程(史上最全图文详解)-mikechen

 

Spring MVC

SpringMVC最全详解(看这篇就够了)

Spring MVC 基于 MVC 模式,因此理解 Spring MVC 需要先对 MVC 模式有所了解。

可以用如下的图形来表示MVC三者之间的关系:
Spring教程(史上最全图文详解)-mikechen

SpringMVC 全名叫 Spring Web MVC,是⼀种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级Web 框架。

SpringMVC是Spring体系结构的一部分,如下图所示:
Spring教程(史上最全图文详解)-mikechen

 

SpringMVC核心组件

SpringMVC五大组件,如下图所示:

Spring教程(史上最全图文详解)-mikechen

1.前端控制器 DispatcherServlet

DispatcherServlet本质上是一个Servlet,相当于一个中转站,所有的访问都会走到这个Servlet中,再根据配置进行中转到相应的Handler中进行处理,获取到数据和视图后,在使用相应视图做出响应。

2.处理器映射器 HandlerMapping

HandlerMapping本质上就是一段映射关系,将访问路径和对应的Handler存储为映射关系,在需要时供前端控制器查阅。

3.处理器适配器 HandlerAdapter

本质上是一个适配器,可以根据要求找到对应的Handler来运行。

由于 Handler 涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发 Handler。

4.视图解析器(ViewResolver)

本质上也是一种映射关系,可以将视图名称映射到真正的视图地址。前端控制器调用处理器适配完成后得到model和view,将view信息传给视图解析器得到真正的view。

5.视图渲染(View)

View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)。
本质上就是将handler处理器中返回的model数据嵌入到视图解析器解析后得到的页面中,向客户端做出响应。

SpringMVC五大组件关系,如下图所示:

Spring教程(史上最全图文详解)-mikechen

  • DispatcherServlet 控制器入口 负责分发请求
  • HandlerMapping 负责根据请求 找到对应的控制器
  • Controller 真正处理请求的控制器
  • ModelAndView 封装数据信息和视图信息的
  • ViewResolver 视图处理器 通过处理找到对应的页面

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法