懒加载---就是我们在spring容器启动的是先不把所有的bean都加载到spring的容器中去,而是在当需要用的时候,才把这个对象实例化到容器中。

@Lazy

在需要懒加载的bean上加上@Lazy就可以了

补充知识:springboot组件懒加载的坑及加载规则

什么是懒加载?

懒加载的意思是不在项目启动的时候实例出来这个组件

@RestController

public class ApiController {

@Autowired

Skill kobSkillImpl;

@RequestMapping("/getRust")

public String test(){

kobSkillImpl.print();

return "Welcome Rust's experience";

}

}

首先这是个api的代码

@RestController

public class ApiController {

@Autowired

Skill kobSkillImpl;

@RequestMapping("/getRust")

public String test(){

kobSkillImpl.print();

return "Welcome Rust's experience";

}

}

下面是服务的代码,我们构造函数输出一段内容以便我们知道它是什么时候加载的,我们使用了@lazy注解,标记且启动懒加载

@Service

@Lazy

public class KoaSkillImpl implements Skill {

KoaSkillImpl(){

System.out.println("Load KoaSkill Impl");

}

@Override

public void print() {

System.out.println("I can KOA.js");

}

}

在这里就能看到,在项目启动的时候,这个z组件就已经开始初始化了,这个说明什么?这个说明@lazy这个注解在现在是无效的。那么解决的方案是什么?

解决方案是在api层也要加个@lazy,也就是说被调用方是懒加载,但是调用方不是懒加载,最终还不会执行懒加载。

我们在api层也加个@lazy,执行项目发现没有初始化输出的内容了。

那么,在懒加载的作用下,什么时候会初始化?

我们请求一下api的接口,发现控制台已经产生输出,并且对这个类进行了实例化,也就是说懒加载只在使用的时候进行加载,项目启动的时候不会对类实例化。

2.关于对service多实现类进行加载

@Service

public class JavaSkillImpl implements Skill {

@Override

public void print() {

System.out.println("I Can Java");

}

}

@Service

@Lazy

public class KoaSkillImpl implements Skill {

KoaSkillImpl(){

System.out.println("Load KoaSkill Impl");

}

@Override

public void print() {

System.out.println("I can KOA.js");

}

}

@Service

public class PythonSkillImpl implements Skill {

@Override

public void print() {

System.out.println("I can Python");

}

}

@RestController

@Lazy

public class ApiController {

@Autowired

Skill koaSkillImpl;

@RequestMapping("/getRust")

public String test(){

koaSkillImpl.print();

return "Welcome Rust's experience";

}

}

例子中有三个类,类都实现了ISkill接口,

api中用的是KoaSkillImpl,那么我命名成KobSkillImpl行不行?

当我们这样运行时,项目启动加载的时候是会报错了,其实服务名称是对不上,那么解决方法

1.就是将这个命名改成类名的驼峰

2.就是在@service注解上加@service(“kobSkillImpl”)

3.我们看下@autowired其实是对Api的注入是不?我们有两个主流的注入方法,一个是setter注入,一个是构造函数注入不是?那我们就可以使用构造函数注入的方式对api注入,取代@Autowired这个注解

@RestController

@Lazy

public class ApiController {

Skill javaSkillImpl;

ApiController(Skill javaSkillImpl){

this.javaSkillImpl=javaSkillImpl;

}

@RequestMapping("/getRust")

public String test(){

javaSkillImpl.print();

return "Welcome Rust's experience";

}

}

以上这篇在springboot中实现个别bean懒加载的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

java懒加载注解_在springboot中实现个别bean懒加载的操作相关推荐

  1. java动态加载jar时,jar中还有第三方jar无法加载的解决方法

    java动态加载jar时,jar中还有第三方jar无法加载的解决方法 当java插件化开发时,即一个java程序在运行的情况下动态加载另一个jar,网上大多数的方法如下 public static v ...

  2. java filter注入,Spring-boot中Filter注入bean

    Spring-boot中Filter注入bean 在spring中使用Filter的方式不用再多说,但是通常情况下我们在使用filter中都可能会注入部分配置的类或者部分具有特殊功能的业务类. 在这种 ...

  3. java加载顺序_类加载过程中几个重点执行顺序整理

    正文前先来一波福利推荐: 福利一: 百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家. 福利二: 毕业答辩以及工 ...

  4. java参数值注入_在springboot中使用注解将值注入参数的操作

    后端的许多管理系统需要登陆者的信息,如shiro登陆后,会将登陆者的信息存储在shiro的session,在使用时需要多行代码获取用户信息.可以把获取在shiro中的登陆者信息封装在一个类中,使用时获 ...

  5. springboot配置文件加载顺序_「SpringBoot系列」配置文件加载优先级解析

    SpringBoot提供了外部分配置功能,可以使用属性文件(properties).YAML(yml)文件.环境变量和命令行参数来进行处部参数配置,并t以特定的顺序来处理配置,以便于允许合理的覆盖值. ...

  6. Java扫描配置文件的注解_详解Spring框架注解扫描开启之配置细节

    前言 Spring框架对Bean进行装配提供了很灵活的方式,下面归纳一下主要的方式: 在XML中进行显示配置 在Java中进行显示配置 隐式的bean发现机制和自动装配 而自动装配实现就需要注解扫描, ...

  7. java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题

    往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...

  8. SpringBoot如何正确控制bean的加载顺序

    1. 为什么需要控制bean的加载顺序 springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题.在此基础上,又提供了SPI[Service Provider Interface]机 ...

  9. Java多线程读取excel文件_解决springboot 多线程使用MultipartFile读取excel文件内容报错问题...

    springboot项目开启多线程 启动类加注解开启 @EnableAsync,实现类方法加注解 @Async 前端页面 报错信息 java.io.FileNotFoundException: C:\ ...

最新文章

  1. 自动挂载配置本地yum源
  2. 我拷贝大文件的时候报“超过文件大小限制”错误,怎样突破这个限制?
  3. c++语言表白超炫图形_教你用C语言加图形库打造炫酷表白连连看
  4. 共识机制-权益证明 PoS
  5. RocketMQ(三):基本原理和架构
  6. 代码谱写传奇,深度揭秘中国开发者现状!
  7. roaringbitmap java,roaringbitmap 源码解析 bitmap add过程
  8. JavaScript中错误正确处理方式,你用对了吗? 1
  9. 设计模式系列:小小总结
  10. mysql自定义函数to_date_mysql 之 str_to_date ()函数 和date_format()函数
  11. Entity Framework使用Sqlite时的一些配置
  12. 专业科目笔试计算机,2021年度中国证监会招考职位专业科目笔试考试大纲(计算机类)...
  13. Microsoft Visual Studio Installer Project模板下载太慢解决办法
  14. 达梦数据库的学习使用
  15. 解决steam无法启动gta5报错msvcp140.dll丢失
  16. html怎么添加视频旋转,拍摄的视频如何旋转 三种方法教你旋转视频
  17. 网页在线 运行 html 代码
  18. 解决在MATLAB Simulink Library Browser找不到Car Sim S-Function的问题
  19. Android 360全景开发(PanoramaGL)
  20. linux命令行控制fluent,linux 提交任务的命令(ansys lsdyna abaqus fluent)

热门文章

  1. F10-MYSQL的yum源码
  2. 数据库SQL语句解析
  3. zencart后台修改首页meta_title、meta_keywords、meta_description
  4. 获取数据库链接Junit
  5. java中switch条件_关于java:你能在Android的switch-case中使用条件语句吗?
  6. Oracle DataBase单实例使用ASM案例(2)--Oracle 11g之环境准备
  7. C++_012C++11的语法新特性
  8. jvm中方法区和常量池详解_JVM——内存区域:运行时数据区域详解
  9. ORACLE数据库定时任务自动停止(broken)的原因分析及解决办法
  10. 南非世界杯火热角逐 金山网盾开启搜索保护