spring学习笔记

2022-10-31

java历程:

“ Java 之父” James os lin

SUN公司 Oak(橡树) 机顶盒 一个小型万维网浏览器 WebRunner (后来改名为 Hot- 2)

1997 日, JavaOne 会议召开,参与者逾 万人,创下当时全球同类会议规模最大之

纪录

1998 12 日, Java 企业平台 J2EE 发布,企业级应用开发领域

1999 月 标准版( J2SE-企图统治桌面应用 )企业版( J2EE-服务器端应用 )微型版(J2ME-移动端应用 )

2004 30 J2SE 1.5 发布

2005 月, JavaOne 大会召开, J2SE->java SE,J2ME->java ME, j2EE ->java EE

2009 20 日, Oracle 收购SUN

2011 28 日, Oracle 公司发布 Java 的正式版 try with sources 语句、

增强 switch-case 语句支持字符串类型等特性

2011 月中旬, Oracle 公司正式发布了 Java EE 该版本的目标在于提高开发人员的生产力,

满足苛刻的企业需求

2014 19 日,java8, Oracle 公司发布 Java 的正式版 该版本中的 Lambdas 表达式、 Streams

流式计算框架等广受开发者关注

javaEE EJB,以 Bean 为重心的强耦合、强侵入性的弊端

 

Rod Johnson Spring之父 Spring 为核心的轻量级应用开发

 

程序的零配置,其核心思想就是“约定大于配置”( Convention over Configuration)

 

xml配置管理bean:

<beans xmlns=”http://www . springframework.org/schema/beans”

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance ”

xmlns:p=”http://www . springframework.org/schema/p”

xsi : schemaLocation=” http: //www .springframework . org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd” >

<bea name ohn-classic ” class=” c om . example . Person” >

<property name=”name ” value=”Way Lau ” />

<property name=”spouse ” ref=”j ane ”/>

</beaη>

<bean name=”john-modern”

class="com.example .Person "

p :name=”WayLau”

p:spouse-ref=”jane ” />

<bean name=”je" class =” com.example.Person ” >

<property ame name val ue =” Jane Doe ” />

</bean>

</beans>

通过注解约定真含义来减少配置数 ,扫描+注解的方式管理bean:

Spring 会自动搜索某些路径下的 Java 类,并将这些 Java 类注册为 Bean 实例

 

注意:如果配置了<con text: component an/>,那么<context:annotation-con:fig/>标签就可以不

用在 XML 中配置了,因为前者包含了后者 另外,<context: component scan/>还提供了两个子标签

<context: inc lud -filter>、<conte xt: exclude-filter>, 用来控制扫描文件的颗粒度,如下所示

扫描配置:

<beans>

<context componeηt-scan base-package=” com.waylau.rest ” >

<context : include-filter type regex exp ression ”.女 Stub Repository” />

<context : exclude-filter type=” annotation” expression=” org . springframe.work .stereotype . Repository” />

</context : component-scan>

</beans>

在类上加注解:

Spring 会适当地将显示指定路径下的类全部注册成 Spring Bean Spring 通过使用特殊的注解来

标注 Bean

@Component :标 个普通的 Spring Bean

@Controller :标注一个控制器组件类

@Service :标注一个服务组件类

@Repoitory 标注 个仓库组件类

 

 

 

springboot定制开箱即用的 Starter

在这方面, Spring Boot 做到了极致 Spring Boot 提供了各种开 即用的 Starter ,旨在最大化减

少应用的配置 例如, spring-boot-starter-web 就提供了全校式 Web 支持,其默认配 就已

包括 Tomcat Spring MVC Hibernate 等常用的 Web 开发框架 集成 用户需要做的仅仅是将

spring-boot-starter-web 依赖包纳入进来即可maven依赖

 

 

 

springboot内嵌容器:

tomcat和jetty

 

springboot2对jdk要求大于等于8

 

 

 

spring -> spring MVC -> spring Boot -> Spring Cloud

 

1. Spring Boot 与 Spring 框架的关系

Spring 框架是通过 IOC 机制来管理 Bean, Spring Boot 依赖 Spring 框架来管理对象的依赖

Spring Boot 并不是 Spring 的精简版本,而是为使用 Spring 做好各种产品级准备

2. Spring Boot 与 Spring MVC 框架的关系

Spring MVC 实现了 We 项目中的 MVC 模式 如果 Spring Boot Web 项目,就可以选

择采用 Spring MVC MVC 模式 当然也可以选择 似的框架来实现

3. Spring Boot 与 Spring Cloud 框架的关系

Spring Cloud 框架可以实现一整套分布式系统的解决方案(当然其中也包括微服务架构的方案),

包括服务注 服务发现 监控等, Spring Boot 作为开发单 服务的框架的基础

 

 

@SpringBootApplication 对于经常使用 Spring 的用 ,很多开发者总 是

使用@Configuration 、@EnableAutoConfiguration 和@ComponentScan 注解 main 于这些注

被如此频繁 块使用, Spring Boot 提供了 个方便的 SpringBootApplication

SpringBootApplication 使用 Configuration 、@EnableAutoConfiguration 和@ComponentScan 性,即:

@SpringBootApplication = (默认属性的 @Configuration + @EnableAutoCon:figuration + @ ComponentScan

它们的 义分别如下 :

@Configuration 与@Bean 组合使用,使用这两个注解就可以创 建个简单 Spring配置

以用来替代相 XML 文件 Configuration 注解类标识这个类可 以使

Spring IoC 器作为 Bean 义的 Bean 注解告 Spring 一个带有@Bean 注解方法

返回 个对 象应该 册为在 Spring 程序上 中的 Bean

@EnableAutoCon:figuration :能够 动配 Spring 文,试图猜测 和配置户想要的Bean

类,通常会自动根据用 Bean 义自动配置。

@ComponentScan 会自动扫描指定包下的全部标有@Component 的类并注册 Bean ,当然

也包括@Component 下的子注解@Service 、@Repository 、@Controller 这些 Bean 般是结

合@Autowired 造函数来注

 

 

@RestController 等价于@Controller 与@ResponseBody 组合,主要用于返回在 RESTFul 应用

常用的 JSON 式数据,

RestController = @Controller + @ResponseBody

其中各项含义如下

ResponseBody 该注解用于将 ontroller 的方法返回对 通过适当的 HttpMessageConverter

转换为指定格式后,写入 Response 对象的 body 数据区

RequestMapping 个用来处理请求地址映射的注解,可用于类或方法上 用于类上,

它表示类中的所有响应请求的方法都是以该地址作为父路径 根据方法的不同,还可以用

GetMapping PostMapping PutMapping DeleteMapping PatchMapping

RestController :暗示用户,这是 个支持 REST 的控制器

 

 

 

 

“依赖注入”和“控制反转”其实就是一个事物的两种不同的说法而已,本质上是一回事 “依

赖注入”是 个程序设计模式和架构模型,有些时候也称为“控制反转”,尽管在技术上来讲,“依

赖注入”是 个“控制反转”的特殊实现

“依赖注入”是指 一个对象应用另外 一个对象来提供 一

个特殊的能力 例如,把一 个数据库连接以参数的形式传到一个对象的结构方法里,而不是在那个

对象内部自行创建 一个连接

“依赖注入”和“控制反转”的基本思想就是把类的依赖从类内部转

化到外部以减少依赖 利用“控制反转”,对象在被创建的时候,会由一个调控系统统一进行对象

实例的管理,将该对象所依赖的对象的引用通过调控系统传递给它 也可以说,依赖被注入到对象

所以,

“控制反转”是关于 个对象如何获取它所依赖的对象的引用的过程,而这个过程体现

为“谁来传递依赖的引用”的这个职责的反转。

 

依赖注入:一个对象依赖另一个对象,原本需要在类的内部进行new对象的操作得到这个被依赖的对象,而依赖注入则重点在实现了注入的动作,

也就是说这个需要被依赖的对象实际已经存在,我们只需要将它注入到需要这个依赖对象的内部即可,而不用在这个需要依赖对象的内部类去new。

 

控制反转:原本需要一个被依赖的对象,需要自己去new或者自己去创建这么一个依赖对象,而现在控制反转则 :则这个依赖对象已经由容器创建好了,只需要告诉容器我需要什么的一个依赖即可

 

IoC 是个过程,即对象定义其依赖关系,而其他与之配合的对象只能通过构造函数参数、工

厂方法的参数,或者在从工厂方法构造或返回后在对象实例上设置的属性来定义其依赖关系 然后,

IoC 容器在 bean 会注入这些依赖项 ,这个过程在职责上是反转的,就是把原先代码里需要

实现的对象 建、依赖的代码,反转给容器来帮忙实现和管理 ,所以称为“控制反转”

Ioc 的技术原理如下

( 1 )反射: 在运行状态中,根据提供的类的路径或者类名,通过反射来动态地获取该类的所

有属性和方法

( 2)工厂模式:把 IoC 容器 个工厂,在配置文件或者注解中给出定义,然后利用反射

技术,根据给出的类名生成相应的对象 对象生成的代码及对象之间的依赖关系在配置文件中定义,

这样就实现了解耦。

 

 

spring的两种注入方式:

1、基于构造函数注入

2、基于setter方式注入

 

默认情况spring bean 都是单列模式

 

由 Spring Boot 开发人员总是频繁使用@ onfiguration

@EnableAutoConfiguration ComponentScan 注解它们的主类,并且这些注解经常被 起使用,

Spring Boot 提供了一种方便 SpringBootApplication 注解来替代

 

AOP ( Aspect Oriented Programming ,面向切面编程)通过提供另一 种思考程序结构的方式来

补充 OOP ( Object Oriented Programmi ,面向对象编程) OOP 模块化的关键单元是类,而在

AOP 中, 模块化的单元是切面( Aspect 切面可以实现诸如跨多个类型和对象之间的事务管理、

日志等方面的模块化。

 

 

 

 

 

 

 

 

Spring 框架中使用 AOP 主要有以下优势

( 1)提供声明式企业服务,特别是作为 EJB 声明性服务的替代品 最重要的是这种服务是

明式 务管理

( 2)允许用户实现自定义切面,在某些不适合用 OOP 编程的场景中,采用 AOP 来补充

(3 )可以对业务逻辑的各个部分进行隔离,从而使业务逻辑各部分之间的精合度降低,提高

程序的可重用性,同时提高了开发的效率

posted @ 2022-10-31 17:03  陈浩文  阅读(24)  评论(0编辑  收藏  举报