Spring中频繁使用的依赖注入方式

使用 idea 做 Java 开发的小伙伴,应该会遇到这个提示:Field injection is not recommended。有强迫症的小伙伴可以试下 Resource 注解。
image.png

1、 基于构造函数的依赖注入

基于构造函数注入的主要优点是可以将需要注入的字段声明为 final
image.png
注意:当 Bean A 依赖 B,Bean B 依赖 A 这种情况下出现循环依赖。Bean A → Bean B → Bean A
image.png
解决循环依赖的方法:

① 重新设计,消除循环依赖;

② 使用注解 @Lazy,在注入依赖时,先注入代理对象,当首次使用时再创建对象完成注入。
③ 使用 Setter/Field 注入

2、基于 Setter 的依赖注入

image.png

3、基于字段的依赖注入

image.png

4、为什么不推荐基于字段依赖注入?

Spring 团队提倡使用基于构造方法的注入,因为这样一方面可以将依赖注入到一个不可变的变量中 (注:final 修饰的变量),另一方面也可以保证这些变量的值不会是 null。此外,经过构造方法完成依赖注入的组件 (注:比如各个 service),在被调用时可以保证它们都完全准备好了。与此同时,从代码质量的角度来看,一个巨大的构造方法通常代表着出现了代码异味,这个类可能承担了过多的责任。

5、@Autowire 和 @Resource 注解的区别

① @Autowired 与 @Resource 都可以用来装配 bean. 都可以写在字段上,或写在 setter 方法上。

② @Autowired 默认按类型装配(这个注解是属业 spring 的),默认情况下必须要求依赖对象必须存在,如果要允许 null 值,可以设置它的 required 属性为 false,如:@Autowired (required=false) ,如果我们想使用名称装配可以结合 @Qualifier 注解进行使用。
image.png
③ @Autowired 是先通过 byType 注入,其次才是 byName, 而 @Resource 则是先 byName, 其次才是 byType

java 类File的方法: mkdir()方法与mkdirs()的区别

mkdir() 如果你想在已经存在的文件夹(D盘下的yyy文件夹)下建立新的文件夹(2010-02-28文件夹),就可以用此方法。此方法不能在不存在的文件夹下建立新的文件夹。假如想建立名字是”2010-02-28”文件夹,那么它的父文件夹必须存在。

mkdirs() 如果你想根据File里的路径名建立文件夹(当你不知道此文件夹是否存在,也不知道父文件夹存在),就可用此方法,它建立文件夹的原则是:如果父文件夹不存在并且最后一级子文件夹不存在,它就自动新建所有路经里写的文件夹;如果父文件夹存在,它就直接在已经存在的父文件夹下新建子文件夹。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码

请我喝杯咖啡吧~

支付宝
微信