spring体系

news/2024/7/7 18:32:31

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、spring从体系架构上分为

1. 基本组件框架组合:Spring Framework

2.专项领域应用组件:Spring Portfolio

这个Spring Portfolio主要应用满足于特定的的应用场合:包括了spring Security/spring boot等等

这里主要阐述基本组件框架组合:Spring Framework。

二、Spring Framework

spring框架的发布版本包括了20个不同的模块。每个模块有3个JAR文件。这20个模块依据所属功能可以划分为6类不同的功能!如下图:

1. spring核心容器

    核心容器是spring框架最核心的部分,它管理着spring应用中bean的创建、配置和管理等等主要为ID依赖注入功能!该功能是spring的两大核心之一!

2. spring的AOP模块

这个模块是spring应用系统中开发切面的基础

3. 数据访问和集成:

     主要用于访问数据持久层(数据库数据等)。包括了简化的JDBC、DAO及框架型ORM如:Mybatis和Hibernate

4. Web和远程调用

    此部分解决了web应用的MVC模型。所以这里集合了spring-MVC框架。另外还支持了用于分布式场景的REST API标准等等!

5. Instrumentation:提供JVM的代理

6. 测试:这是spring的测试单元模块,可以模拟用户的请求场景等测试!

三、spring的两个核心内容

    DI【依赖注入】和AOP【面向切面】

1.  spring DI【依赖注入】

A. 简化POJO老式Java开发,实现解耦!

B. 注入的方式有很多,最常见几种注入方式【装备方式】:推荐用自动配置的机制!

C. 一个完整的注入流程:

C1. 由servlet容器(tomcat)的web.xml或者测试单元的@RunWith(SpringJunit4ClassRunner.class)创建spring容器(分为bean工厂+多种spring上下文)(常用的XmlWebApplicationContext:用于加载XML方式的bean注入和AnnotationConfigWebApplicationContext:用于javaConfig注入方式!),并通过spring容器结合配置文件创建各种各样的组件bean!多数使用上下文作为spring容器多一点!所以下方以上下文为例!

C2. 通过spring上下文对象去加载配置文件(JavaConfig的@Configuration或者XML配置都可以)

C3. spring上下文通过配置文件发现(扫描也好配置也好)了bean之后并创建bean,然后查看在哪注入,就进行组装和注入了!并创建这些组件bean之间的关联关系!

1)借助JavaConfig+@Bean完成显式注入:

    a. 带有@Bean注解的方法可以采用任何必要的Java功能来产生bean实例。这种方式主要应用于注入第三方库的场景,因为我们没办法在别人的代码里面去声明一个带有我们要注解的bean!

    b.这种方式直接编写一个配置类(javaConfig)@Configuration注解:表示这是一个配置类!

    c.然后在这个配置类中添加方法(这个方法可以是构造方法或者是Setter方法)并带上注解@Bean!这个方法返回的是一个实例化new对象。通过这个方法返回一个对象,即可完成一次注入!

    d.@Bean("id")可以给bean定义一个ID

    e.bean的单例性,可将同一个bean实例注入到任意数量的其他bean中!

    使用Javaconfig的时候,要创建一个带有@Configuration注解的类!

2)xml配置:

    a.要创建一个XML文件,并以<beans>元素为根

    b.创建<bean>元素【等同于javaConfig的@Bean注释方法!注解】

    c. 填写id和class(指定到对应的java类)

a/b/c完成了一个原材料Bean的定义!

<bean id="compactDisc" class="soundsystem.SgtPeppers"/>

    d. 定义另外一个<bean>配置类Bean(等同于JavaConfig配置类),然后在这个使用者中通过constructor-arg(这是)引用材料bean的id

    d1.构造方式【引入ref】注入

<bean id="cdPlayer" class="soundsystem.CDPlayer"><constructor-arg ref="compactDisc" />
<bean/>

    d2.构造方式字面量【value属性】注入[这里用了spring的c命名空间等同于constructor-arg]

<bean id="compactDisc">class="soundsystem.BlankDisc"c:_tittle="THIS IS TITTLE"c:_artist="ARTIST NAME"
<bean/>

这个方式注入的时候可以通过<set><list>元素注入多个参数!

e. Setter注入方式!

在使用者类没有显式的编写构造函数的时候(只有默认隐式)推荐使用此方式注入!Setter方式的注入需要在<bean>元素标签中使用<property>注入到compactDisc的compactDisc属性中(setCompactDisc()Setter方法)(如下例子):property的命名空间是p!Setter同样有ref引用方式和字面量<value>方式!

<bean id="cdPlayer" class="soundsystem.CDPlayer"><property name="compactDisc" ref="compactDisc"/>
<bean/>

3) 自动化装配bean(推荐)

A. 创建被发现扫描的bean类

@Component注解和@Named

:表明该类会作为组件,并告知spring为这个类创建bean。我们知道以上javaConfig装配或者XML装配也好都会给相关的bean命名ID。当然用@Component(id)和@Named(id)也是可以的。

B. 配置启动扫描类:

a. @Configuration+@ComponentScan注解:这个注解能在spring中启动组件扫描,默认会扫描与之同一个package包下的所有类和子包。当然这个启动扫描也可以指定到特定的包或几个包!

@Configuration的作用同上述Javaconfig方法装配bean一样表明这个类是一个配置类

b. 使用XML来启动扫描:<context:component-scan>元素

C. @Autowired完成注入:

如何加载配置:@ContextConfiguration注解—》加载刚 @Configuration+@ComponentScan注解的bean启动扫描——》扫描到同一个包下的所有@Component注解的bean!——》通过@Autowired注解在属性上完成bean的注入!

@Autowired(或者java的规范注入:@Inject)在使用类中的构造方法或者Setter方法中或者其他方法上加入@Autowired,并在方法的参数中传入要注入的bean作为参数即可完成自动装配的注入!【有点类似javaConfig方式的@Bean注解,但是有区别,@Bean是返回一个new实例,而@Autowired是通过参数传入】

4)三种装配方法对比

javaConfig方式XML方式自动化装配
配置Bean类+材料Bean类

创建一个以<beans>

元素为跟的XML文件

配置&扫描类+被发现的材料bean类

无需创建材料类bean!

创建<bean>基本材料bean,

指明ID和包名

创建一个可被发现的材料bean:

@Component注解和@Named

@Configuration注解定义一个配置类创建<bean>配置类bean!

@Configuration定义配置类且

@ComponentScan注解:启动组件扫描

或者使用XML定义扫描

<context:component-scan>

在统一个配置类中通过@Bean注解的方法

返回一个new实例完成注入

通过<constructor-arg>构造方式

和<property>的Setter方式完成注入

默认自动扫描所配置的扫描类的

同一个包下的所有包和类.最后通过

@Autowired注解的方法以

要引入的对象属性参数形式自动注入!

主要应用于注入第三方jar库的场景配置式的编程方式!推荐!

2. spring AOP面向切面编程

主要应用于日志、事务、安全等不需要参与到主业务的代码的工作,悄悄的去监督主业务的代码!

关键词:

连接点:所监控对象类的所有接口

切   点:所需要关注的特定的入口。在spring AOP中要使用AspectJ的切点表达式语言来定义切点!

execution(* concert.Performance.perform(..))

通   知:触发器

切   面:以@Aspect注解的类! 切点和通知的结合:一个切面有五个触发器:

@After/@AfterReturning/@AfterThrowing/@Around/@Before

织   入:把切面真正的启动开始执行监控工作!

引   入:给监控对象偷偷的“私自”添加新的方法而不打扰对象本身!

 

AOP如何跟注入的Bean配合呢?

四、spring应用于WEB(spring MVC)

 

由web.xml(或者其他方法)配置DispatcherServlet,当DispatcherServlet启动时,会创建spring应用上下文。这个上下文会同普通spring上下文一样去加载配置类的bean(java:@EnableWebMVC)或者XML(特殊的命名方式)。在配置类或者配置XML里要声明视图解析器、组件扫描器、静态资源处理等等。这样就和普通的spring过程一样了!有个区别是使用spitter.web包的@Controller(控制类)一系列注解代替普通的扫描注解@Component-Scan!

1. @Controller注解同@Component注解的方法一样!是为了让扫描发现自己!

2. @RequestMapping注解到控制类方法上:声明了他们所需要处理的请求

3.@RequestMapping分解级别!

4. mock Spring MVC来来模拟执行HTTP请求!从这个模拟中可以看出要不要返回视图是看请求方的意愿了!

5. JSP如何访问spring后台返回的Model数据呢?通过JSTL!

6. 接收请求的输入:@RequestParam注解获取HTTP中输入参数!如果没有对应的value值就会给定默认值!这个@RequestParam可以放在方法参数中,也可以放在方法中修饰变量!

7. RPC和URL的区别?理想情况下应该通过URL的形式发起请求,因为能完整的知道资源的路径。而如果RPC(域名地址+?参数=dd...)通过参数去访问资源就隐藏了中间的地址了!

8. 接收占位符!

9. 带有重定向式的视图:redirect:前缀!
10. 校验注解:直接通过注解去校验。而不用自己动手写校验方法!

11. 重定向:P165

12.  传递负责的数据!

五、spring所支持的业务框架

1. spring web flow:适合元素按规定的流程运行!

2. spring security:解决spring的安全:认证、拦截、过滤等等!

六、 spring ORM:Hibernate/Mybatis...

七、 spring REST API

八、 spring boot

九、spring Email

十. SSM

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3697586/blog/1815327


http://lihuaxi.xjx100.cn/news/236921.html

相关文章

简单粗暴告诉你什么是区块链

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链是什么&#xff1f;它是如何工作的&#xff1f; 比特币已经成为现代互联网的潮流 - 随之而来的是区块链。人们说区块链技术将导致互联网运作…

Mybait缓存机制

MyBatis同大多数ORM框架一样&#xff0c;提供了一级缓存和二级缓存的支持。 一级缓存&#xff1a;其作用域为session范围内&#xff0c;当session执行flush或close方法后&#xff0c;一级缓存会被清空。 二级缓存&#xff1a;二级缓存和一级缓存机制相同&#xff0c;但是可以自…

ES6基础之Array.fill函数

引子 关注「时事」的同学都会注意到&#xff0c;ES6和TypeScript是时下「投资」的热门。作为一位老同学&#xff0c;我也注意到这一点&#xff0c;不断收集一些小东东&#xff0c;以备不时之需。 正题 本文中记录的是ES6为Array增加的fill()函数。其功能是&#xff0c;用户可以…

Java堆内存分配与回收策略

java主要在堆上分配内存&#xff0c;而Java堆又分为新生代(YoungGen)和老年代(OldGen)两个部分&#xff0c;新生代又再分为Eden区和Survivor区两部分&#xff0c;本文根据java堆的划分&#xff0c;描述hotspot的内存分配策略。 GC垃圾收集分类 Minor GC: 发生在新生代中的垃圾…

“区块链”究竟是什么

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 什么是区块链&#xff1f; 说到区块链&#xff0c;就不得不说比特币。   2008年底&#xff0c;比特币之父中本聪发表了一个关于他研究的电子现金…

sass的继承,混合宏,占位符的用法总结

SCSS中混合宏使用 mixin mt($var){ margin-top: $var; }.block { include mt(5px);span { display:block; include mt(5px); } }extend如何工作 .icon {transition: background-color ease .2s;margin: 0 .5em;}.error-icon {extend .icon;/*错误图标指定的样式... */}.info-i…

首例利用智能路由网关犯罪嫌疑人被捕:罪名流量劫持

首例利用智能路由网关犯罪嫌疑人被捕:罪名流量劫持 https://tech.sina.cn/digi/nb/2018-05-15/detail-ihapkuvm0295695.d.html 上海市徐汇区人民检察院依法以破坏计算机信息系统罪对全市首例利用智能路由网关设备进行流量劫持的犯罪嫌疑人章某批准逮捕。 经查&#xff0c;2018年…

区块链技术未来可能用于哪些方面?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 当世界上从100比特币购买25美分的比萨饼&#xff0c;到一比特币兑换4800人民币的天价&#xff0c;在这风起云涌的纪念&#xff0c;我们见证了一个…