Spring详细总结1

简介: 1.Spring简介1.1 Spring概述(1)Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用Spring 框架来创建性能好(spring为我们提供对象的创建)、易于测试(整合了Junit)、可重用的代码(例如把事务的代码放到切面中,再把切面作用于方法中)。




1.Spring简介


1.1 Spring概述


(1)Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用Spring 框架

来创建性能好(spring为我们提供对象的创建)、易于测试(整合了Junit)、可重用的代码(例如把事务的代码放到切面中,

再把切面作用于方法中)。


(2)Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在

Apache 2.0 许可下发布。


(3)Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。


(4)Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应

用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO

编程模型来促进良好的编程实践。


1.2 Spring Framework


Spring Framework就是Spring 的基础框架,可以视为 Spring 基础设施,基本上任何其他 Spring 项目都是以

Spring Framework为基础的。


1.2.1、Spring Framework特性


(1)非侵入式:使用 Spring Framework 开发应用程序时,Spring 对应用程序本身的结构影响非常小。

对领域模型可以做到零污染;对功能性组件也只需要使用几个简单的注解进行标记,完全不会

破坏原有结构,反而能将组件结构进一步简化。这就使得基于 Spring Framework 开发应用程序

时结构清晰、简洁优雅。


(2)控制反转:IOC(Inversion of Control),反转资源获取方向。把自己创建资源、向环境索取资源

变成环境将资源准备好,我们享受资源注入。


(3)面向切面编程:AOP(Aspect Oriented Programming),在不修改源代码的基础上增强代码功能。


(4)容器:Spring IOC 是一个容器,因为它包含并且管理组件对象的生命周期。组件享受到了容器化

的管理,替程序员屏蔽了组件创建过程中的大量细节,极大的降低了使用门槛,大幅度提高了开发

效率。


(5)组件化:Spring 实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用 XML

和 Java 注解组合这些对象。这使得我们可以基于一个个功能明确、边界清晰的组件有条不紊的搭

建超大型复杂应用系统。


(6)声明式:很多以前需要编写代码才能实现的功能,现在只需要声明需求即可由框架代为实现。


(7)一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架(如mybatis)和优秀的第三方类库。而且

Spring 旗下的项目已经覆盖了广泛领域,很多方面的功能性需求可以在 Spring Framework 的基

础上全部使用 Spring 来实现


1.2.2 Spring Framework五大功能模块


628d129af2b349129ce64404ea7421d6.png


2.IOC


2.1 IOC容器


2.1.1 IOC思想


IOC:Inversion of Control,翻译过来是控制反转。


(1)获取资源的传统方式

①就像自己做饭:买菜、洗菜、择菜、改刀、炒菜,全过程参与,费时费力,必须清楚了解资源创建整个

过程中的全部细节且熟练掌握。

②在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的

模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。


(2)控制反转方式获取资源

①就像点外卖:下单、等、吃,省时省力,不必关心资源创建过程的所有细节。

②控制反转的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主

动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源

的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。


(3)DI(Dependency Injection),翻译过来是依赖注入。DI 是 IOC 的具体实现方式:即组件以一些预先定义好的方式

(例如:set 注入,构造器注入等)接收来自于容器的资源注入。总结就是:IOC 是一种控制反转的思想, 而 DI

是对 IOC 的一种具体实现。


2.1.2 IOC容器在Spring中的实现


Spring 的 IOC 容器就是 IOC 思想的一个落地的产品实现。IOC 容器中管理的组件也叫做 bean。在创建

bean 之前,首先需要创建 IOC 容器。Spring 提供了 IOC 容器的两种实现方式:

①BeanFactory

这是 IOC 容器的基本实现,是 Spring 内部使用的接口。面向 Spring 本身,不提供给开发人员使用。

②ApplicationContext

BeanFactory 的子接口,提供了更多高级特性。面向 Spring 的使用者,几乎所有场合都使用ApplicationContext

而不是底层的 BeanFactory。ApplicationContext的主要实现类如下:


f719ede225884e579bc438897e8f7f13.png


cb2fc135ce724516b596838f2f282441.png


2.2 基于XML管理bean


2.2.1 入门案例


(1)创建maven工程

(2)引入依赖


<dependencies>
<!-- 基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar包 -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.1</version>
  </dependency>
<!-- junit测试 -->
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>
</dependencies>


spring-context结构如下:


215c2cb3566944c380d36db353aeee6d.png


(3)创建Student类


public class Student {
    private Integer sid;
    private String name;
    private Integer age;
    private String gender;
  // 全参,无参构造器
  // Get/Set方法,toString方法
}


(4)创建Spring配置文件


04a38f9781a84885bfefdce8c3c92d03.png


(5)在Spring中配置bean

applicationContext.xml


<!--
配置Student所对应的bean,即将Student的对象交给Spring的IOC容器管理;通过bean标签配置IOC容器所管理的bean
属性:
id:设置bean的唯一标识
class:设置bean所对应类型的全类名
-->
<?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="student" class="com.atguigu.spring.Student"></bean>
</beans


(6)创建测试类测试


public class IocTest {
    @Test
    public void testIoc(){
//        获取IOC容器
        ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("spring-ioc.xml");
//        获取bean(在IOC容器中,通过反射Class.forName().newInstance()+工厂模式来创建对象)
        Student student = ioc.getBean(Student.class);
        System.out.println(student);
    } }


(7)注意

Spring 底层默认通过反射技术调用组件类的无参构造器来创建组件对象,这一点需要注意。如果在需要

无参构造器时,没有无参构造器,则会抛出异常


2.2.2 获取bean


(1)方式一:根据id获取

由于 id 属性指定了 bean 的唯一标识,所以根据 bean 标签的 id 属性可以精确获取到一个组件对象。


(2)方式二:根据类型获取


@Test
public void testHelloWorld(){
  ApplicationContext ac = newClassPathXmlApplicationContext("applicationContext.xml");
  HelloWorld bean = ac.getBean(HelloWorld.class);
  bean.sayHello();
}


(3)方式三:根据id和类型


@Test
public void testHelloWorld(){
  ApplicationContext ac = newClassPathXmlApplicationContext("applicationContext.xml");
  HelloWorld bean = ac.getBean("helloworld", HelloWorld.class);
  bean.sayHello();
}


(4)注意


当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个。当IOC容器中一共配置了两个,

那么根据类型获取时就会抛出异常


(5)扩展

①如果组件类实现了接口,根据接口类型可以获取 bean 吗?

可以,前提是bean唯一


②如果一个接口有多个实现类,这些实现类都配置了 bean,根据接口类型可以获取 bean 吗?

不行,因为bean不唯一


(6)结论

根据类型来获取bean时,在满足bean唯一性的前提下,其实只是看:『对象 instanceof 指定的类型』

的返回结果,只要返回的是true就可以认定为和类型匹配,就能够获取到。


目录
相关文章
|
安全 Java Maven
Spring Boot资源文件问题总结(Spring Boot的静态资源访问,配置文件外置)
Spring Boot资源文件问题总结(Spring Boot的静态资源访问,配置文件外置)
1568 1
|
设计模式 Java 开发者
吐血整理!最全Spring设计模式总结
吐血整理!最全Spring设计模式总结
897 0
吐血整理!最全Spring设计模式总结
|
安全 前端开发 Java
Spring Security-全面详解(学习总结---从入门到深化)(上)
Spring Security是Spring项目组提供的安全服务框架,核心功能包 括认证和授权。它为系统提供了声明式安全访问控制功能,减少了 为系统安全而编写大量重复代码的工作。
11847 2
Spring Security-全面详解(学习总结---从入门到深化)(上)
|
Java Spring
spring讲解笔记:spring框架学习的要点总结
spring讲解笔记:spring框架学习的要点总结
164 0
spring讲解笔记:spring框架学习的要点总结
|
Java Spring
Spring框架讲解笔记:spring框架学习的要点总结
Spring框架讲解笔记:spring框架学习的要点总结
179 0
Spring框架讲解笔记:spring框架学习的要点总结
|
XML JSON 前端开发
Spring MVC 系列之拦截器 Interceptor 最全总结
理解拦截器 Interceptor 拦截器 Interceptor 在 Spring MVC 中的地位等同于 Servlet 规范中的过滤器 Filter,拦截的是处理器的执行,由于是全局行为,因此常用于做一些通用的功能,如请求日志打印、权限控制等。
1673 0
Spring MVC 系列之拦截器 Interceptor 最全总结
|
XML 缓存 JSON
Spring MVC 阅读官方文档知识点总结
Spring MVC 阅读官方文档知识点总结
184 8
|
XML 缓存 安全
Java初级-Spring常见面试题总结
Java初级-Spring常见面试题总结
|
Java 程序员 Spring
79. 别找了,回答Spring中Bean的生命周期,这里帮你总结好了
79. 别找了,回答Spring中Bean的生命周期,这里帮你总结好了
163 0
79. 别找了,回答Spring中Bean的生命周期,这里帮你总结好了
|
XML Java 程序员
Spring详细总结3
Spring详细总结3
220 0
Spring详细总结3