java懒加载注解_在springboot中实现个别bean懒加载的操作
懒加载---就是我们在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懒加载的操作相关推荐
- java动态加载jar时,jar中还有第三方jar无法加载的解决方法
java动态加载jar时,jar中还有第三方jar无法加载的解决方法 当java插件化开发时,即一个java程序在运行的情况下动态加载另一个jar,网上大多数的方法如下 public static v ...
- java filter注入,Spring-boot中Filter注入bean
Spring-boot中Filter注入bean 在spring中使用Filter的方式不用再多说,但是通常情况下我们在使用filter中都可能会注入部分配置的类或者部分具有特殊功能的业务类. 在这种 ...
- java加载顺序_类加载过程中几个重点执行顺序整理
正文前先来一波福利推荐: 福利一: 百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家. 福利二: 毕业答辩以及工 ...
- java参数值注入_在springboot中使用注解将值注入参数的操作
后端的许多管理系统需要登陆者的信息,如shiro登陆后,会将登陆者的信息存储在shiro的session,在使用时需要多行代码获取用户信息.可以把获取在shiro中的登陆者信息封装在一个类中,使用时获 ...
- springboot配置文件加载顺序_「SpringBoot系列」配置文件加载优先级解析
SpringBoot提供了外部分配置功能,可以使用属性文件(properties).YAML(yml)文件.环境变量和命令行参数来进行处部参数配置,并t以特定的顺序来处理配置,以便于允许合理的覆盖值. ...
- Java扫描配置文件的注解_详解Spring框架注解扫描开启之配置细节
前言 Spring框架对Bean进行装配提供了很灵活的方式,下面归纳一下主要的方式: 在XML中进行显示配置 在Java中进行显示配置 隐式的bean发现机制和自动装配 而自动装配实现就需要注解扫描, ...
- java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题
往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...
- SpringBoot如何正确控制bean的加载顺序
1. 为什么需要控制bean的加载顺序 springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题.在此基础上,又提供了SPI[Service Provider Interface]机 ...
- Java多线程读取excel文件_解决springboot 多线程使用MultipartFile读取excel文件内容报错问题...
springboot项目开启多线程 启动类加注解开启 @EnableAsync,实现类方法加注解 @Async 前端页面 报错信息 java.io.FileNotFoundException: C:\ ...
最新文章
- 自动挂载配置本地yum源
- 我拷贝大文件的时候报“超过文件大小限制”错误,怎样突破这个限制?
- c++语言表白超炫图形_教你用C语言加图形库打造炫酷表白连连看
- 共识机制-权益证明 PoS
- RocketMQ(三):基本原理和架构
- 代码谱写传奇,深度揭秘中国开发者现状!
- roaringbitmap java,roaringbitmap 源码解析 bitmap add过程
- JavaScript中错误正确处理方式,你用对了吗? 1
- 设计模式系列:小小总结
- mysql自定义函数to_date_mysql 之 str_to_date ()函数 和date_format()函数
- Entity Framework使用Sqlite时的一些配置
- 专业科目笔试计算机,2021年度中国证监会招考职位专业科目笔试考试大纲(计算机类)...
- Microsoft Visual Studio Installer Project模板下载太慢解决办法
- 达梦数据库的学习使用
- 解决steam无法启动gta5报错msvcp140.dll丢失
- html怎么添加视频旋转,拍摄的视频如何旋转 三种方法教你旋转视频
- 网页在线 运行 html 代码
- 解决在MATLAB Simulink Library Browser找不到Car Sim S-Function的问题
- Android 360全景开发(PanoramaGL)
- linux命令行控制fluent,linux 提交任务的命令(ansys lsdyna abaqus fluent)
热门文章
- F10-MYSQL的yum源码
- 数据库SQL语句解析
- zencart后台修改首页meta_title、meta_keywords、meta_description
- 获取数据库链接Junit
- java中switch条件_关于java:你能在Android的switch-case中使用条件语句吗?
- Oracle DataBase单实例使用ASM案例(2)--Oracle 11g之环境准备
- C++_012C++11的语法新特性
- jvm中方法区和常量池详解_JVM——内存区域:运行时数据区域详解
- ORACLE数据库定时任务自动停止(broken)的原因分析及解决办法
- 南非世界杯火热角逐 金山网盾开启搜索保护