Java详细讲解依赖注入的方式

 更新时间:2022年06月22日 11:15:12   作者:ifredom  
Idea中使用@Autowire注解会出现提示黄线,强迫症患者看着很难受,使用构造器注入或者setter方法注入后可解决,下面我们一起来看看

Spring中的三种依赖注入方式

  • Field Injection :@Autowired注解的一大使用场景就是Field Injection
  • Constructor Injection :构造器注入,是我们日常最为推荐的一种使用方式Setter Injection:
  • Setter Injection也会用到@Autowired注解,但使用方式与Field Injection有所不同,Field Injection是用在成员变量上,而Setter Injection的时候,是用在成员变量的Setter函数上
// Field Injection
@Service("uploadService")
public class UploadServiceImpl extends ServiceImpl<UploadDao, UploadEntity> implements UploadService {
    @Autowired
    private UploadDao uploadDao;
}
// Constructor Injection
@Service("uploadService")
public class UploadServiceImpl extends ServiceImpl<UploadDao, UploadEntity> implements UploadService {
    private UploadDao uploadDao;
	UploadServiceImpl(UploadDao uploadDao){
		this.uploadDao = uploadDao;
	}
}
// Setter Injection
@Service("uploadService")
public class UploadServiceImpl extends ServiceImpl<UploadDao, UploadEntity> implements UploadService {
    private UploadDao uploadDao;
	@Autowired
	public void setUploadDao(UploadDao uploadDao){
		this.uploadDao =uploadDao
	}
}

1.是否进行循环依赖检测

  • Field Injection:不检测
  • Constructor Injection:自动检测
  • Setter Injection:不检测

可能遇到的问题

循环依赖报错: 当服务A需要用到服务B时,并且服务B又需要用到服务A时,Spring在初始化创建Bean时,不知道应该先创建哪一个,就会出现该报错。

This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example

class ServerA{
	@Autowired
	private ServerB b;
}
class ServerB{
	@Autowired
	private ServerA a;
}

如果使用构造方式注入,能够精准的提醒你是哪两个类产生了循环依赖 .异常报错信息能够迅速定位问题:

循环报错解决办法是使用 @Lazy注解 ,对任意一个需要被注入Bean添加该注解,表示延迟创建即可。

class ServerA{
	@Autowired
	@Lazy
	private ServerB b;
}
class ServerB{
	@Autowired
	@Lazy
	private ServerA a;
}

以上就是Java详细讲解依赖注入的方式的详细内容,更多关于Java依赖注入的资料请关注脚本之家其它相关文章!

相关文章

  • java 实现读取clob

    java 实现读取clob

    这篇文章主要介绍了java 如何实现读取clob,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-10-10
  • 使用Java实现百万Excel数据导出

    使用Java实现百万Excel数据导出

    这篇文章主要为大家详细介绍了如何使用Java实现百万Excel数据导出,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2024-03-03
  • Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

    Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

    使用Jackson库进行JSON序列化时遇到了无限递归(Infinite Recursion)问题,这是因为两个实体类ComPointQuotaEntity和 ComPointEntity之间存在双向关联point和pointQuota相互引用,本文给大家介绍解决方案,感兴趣的朋友一起看看吧
    2025-03-03
  • Java实现贪吃蛇游戏(1小时学会)

    Java实现贪吃蛇游戏(1小时学会)

    这篇文章主要为大家详细介绍了Java实现贪吃蛇游戏,1小时学会贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • IDEA启动Tomcat时控制台出现乱码问题及解决

    IDEA启动Tomcat时控制台出现乱码问题及解决

    这篇文章主要介绍了IDEA启动Tomcat时控制台出现乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • SpringBoot简单实现文件上传

    SpringBoot简单实现文件上传

    这篇文章主要介绍了SpringBoot简单实现文件上传,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-09-09
  • java利用Future实现多线程执行与结果聚合实例代码

    java利用Future实现多线程执行与结果聚合实例代码

    这篇文章主要给大家介绍了关于java利用Future实现多线程执行与结果聚合的相关资料,Future模式的核心,去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑,需要的朋友可以参考下
    2021-12-12
  • Java生成短8位UUID的实现方案

    Java生成短8位UUID的实现方案

    在Java中,UUID通常用于生成全局唯一的标识符,标准的UUID是128位的,由32个十六进制数字组成,并通过特定的算法保证其在全球范围内的唯一性,本文给大家介绍了一个简单的Java方法,用于生成一个较短的8位UUID,需要的朋友可以参考下
    2025-01-01
  • Java使用正则表达式匹配获取链接地址的方法示例

    Java使用正则表达式匹配获取链接地址的方法示例

    这篇文章主要介绍了Java使用正则表达式匹配获取链接地址的方法,简单分析了java正则匹配常用方法及获取网址链接的相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • Java实现MapStruct对象转换的示例代码

    Java实现MapStruct对象转换的示例代码

    本文主要介绍了MapStruct在Java中的对象转换使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12

最新评论