0
点赞
收藏
分享

微信扫一扫

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】

Spring原理分析-Scope

本文纲要:

一、Scope
1、Scope类型

2、基础准备与演示

二、Scope失效
1、基础准备与演示
2、失效原因及处理
3、总结


下面开始进入正文:

一、Scope

1、Scope类型

singleton, prototype, request, session, application

2、基础准备与演示

  • ① 编写各种Scope的Bean

request类型,如下:

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html

session类型,如下:

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_静态资源_02

application类型,如下:

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_03

  • ② 编写Controller类

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_spring_04

  • ③ 编写启动类

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_05

  • ④ 测试

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_06


二、Scope失效

1、基础准备与演示

  • ① 多例Bean

编写F1,其Scope为prototype多例,如下:

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_07

  • ② Bean属性管理多例Bean

编写E,其内部注入F1,如下:

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_08

  • ③ 测试类

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_spring_09

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_静态资源_10


2、失效原因及处理

  • ① 失效原因

单例E被创建时,完成了F属性的注入。此后调用get方法,得到的始终是只创建一次时注入的F对象。

  • ② 处理方法

Ⅰ 添加@Lazy注解

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_spring_11


@Lazy注解会生成目标对象的代理对象,代理对象虽然还是同一个,但当每次使用代理对象的任意方法时,由代理创建新的 f 对象。

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_12


Ⅱ 添加proxyMode = ScopedProxyMode.TARGET_CLASS属性


@Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
@Component
public class F2 {
}

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_13


Ⅲ 使用ObjectFactory工厂


@Autowired
private ObjectFactory<F3> f3;

public F3 getF3() {
    return f3.getObject();
}

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_静态资源_14


Ⅳ 使用ApplicationContext


@Autowired
private ApplicationContext context;

public F4 getF4(){return context.getBean(F4.class);}

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_spring_15


3、总结

  • ① Scope失效处理方法:

Ⅰ @Lazy注解;

Ⅱ @Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS);

Ⅲ ObjectFactory工厂;

Ⅳ ApplicationContext。

四种方法的共同特点都是在运行时再去获取多例对象,推迟了其他Scope Bean的获取。


  • ② 推荐使用

推荐使用ObjectFactory工厂、ApplicationContext这两种方法,性能更优。


三、结尾

以上即为Spring原理分析-Scope的全部内容

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

接下来讲解:

Spring Boot自定义静态资源映射

本文纲要

  • 一、背景
    1、Spring Boot项目静态资源默认访问路径
    2、在IDEA中对应的路径
    3、优先级顺序


  • 二、自定义静态资源映射
    1、配置文件配置
    2、WebMvcConfigurationSupport配置


一、背景

0、基础html页面

注意将不同demo的序号按文件修改即可demo01.html内容如下:

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_spring_16

1、Spring Boot项目静态资源默认访问路径

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_17

2、在IDEA中对应的路径

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_18


访问方法:http://localhost:8080/demo01.html,如下:

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_19


3、优先级顺序:

Ⅰ classpath:/META-INF/resources →

Ⅱ classpath:/resources →

Ⅲ classpath:/static →

Ⅳ classpath:/public


二、自定义静态资源映射

1、配置文件配置

  • ① 配置方式

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_20

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_spring_21


  • ② 注意

Ⅰ 此处是覆盖原有配置的,所以默认路径不能漏掉,假设删除原有路径映射,如下:

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_spring_22

可以看到此时正常访问的为,demo01和demo05,如下:

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_23

=

注意:如此配置原有配置仅剩 classpath:/META-INF/resources 还生效。

Ⅱ 静态文件请求匹配方式

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_24


修改后访问路径http://localhost:8080/test/demo05.html,访问如下:

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_25


2、WebMvcConfigurationSupport配置

  • ① 编写静态资源映射类

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_spring_26

  • ② 测试

【Spring原理分析-Scope+Spring Boot自定义静态资源映射】_html_27


注意:此种配置下,原有的静态资源路径被覆盖、失效。


三、结尾

以上即为Spring Boot自定义静态资源映射的全部内容




举报

相关推荐

0 条评论