网站建设中图片联系方式,工程建设项目,wordpress 架构原理,wordpress赚钱插件目录前言一、Resource和Autowired注解的身世1、Resource注解2、Autowired注解3、常见的三种依赖注入方式及区别1. Filed注入2. Setter注入3. Constructor注入4. 三种依赖注入方式的区别二、Resource和Autowired注解的区别三、Resource和Autowired注解的推荐用法前言
当我们在属…
目录前言一、Resource和Autowired注解的身世1、Resource注解2、Autowired注解3、常见的三种依赖注入方式及区别1. Filed注入2. Setter注入3. Constructor注入4. 三种依赖注入方式的区别二、Resource和Autowired注解的区别三、Resource和Autowired注解的推荐用法前言
当我们在属性上使用Autowired的时候IDEA会曝黄色的警告如下图所示 你如果问老员工应该怎么办时一般会让你换成Resource注解问其原因可能大部分人都不太讲的清楚。 一、Resource和Autowired注解的身世
要弄清楚就要先了解Resource和Autowired注解的身世。
1、Resource注解
Resource注解由2006年5月的 JSR 250Java 发布 。
Resource注解的官方介绍 1、标记了应用程序需要的资源。 2、可以应用于应用程序组件类或者组件类的字段或方法。 3、当应用于字段或方法时容器将在组件初始化时将所请求资源的实例注入到应用程序组件中。 3、如果应用于组件类则注释声明应用程序将在运行时查找的资源。 2、Autowired注解
Autowired注解由2007年11月19日的 Spring2.5 发布。
Autowired注解的官方介绍 1、将构造函数、字段、设置方法或者配置方法标记为由 Spring 的依赖注入工具自动装配。 3、常见的三种依赖注入方式及区别
Autowired注解IDEA为什么会曝黄色的警告
警告的内容为field injection is not recommended不推荐使用Field注入那应该推荐使用什么方式注入呢
我们先来看下常见的三种依赖注入方式
1. Filed注入 2. Setter注入 3. 构造方法注入
1. Filed注入
属性方法Filed注入此方式是使用最多的因为这种方式使用起来非常简单代码也非常的简洁。
Controller
public class HelloController {Autowiredprivate CourseService courseService;
}2. Setter注入
普通方法Setter注入就是先写Setter函数然后在使用到的地方直接调用。
Controller
public class HelloController {private CourseService courseService;Autowiredpublic void setCourseService(CourseService courseService) {this.courseService courseService;}
}3. Constructor注入
构造方法Constructor注入就是使用构造函数的方法实现。
Controller
public class HelloController {private final CourseService courseService;Autowiredpublic HelloController(CourseService courseService) {this.courseService courseService;}
}4. 三种依赖注入方式的区别
Filed注入声明不了常量的属性因为 final 的字段必须在类实例化时去实例化。
Filed注入在类中很容易有很多依赖。
Filed注入违反单一原则当有多个依赖时不容易看出依赖关系容易循环依赖。
Filed注入无法独立于容器之外实例化。
——————————————————————————————————————————————
Setter注入实现可选依赖。
Setter注入可以将依赖项部分注入。
Setter注入可以解决循环依赖。
Setter注入自己开发的模块推荐使用。
Setter注入可变的。
——————————————————————————————————————————————
Constructor注入实现强制依赖。
Constructor注入只能将依赖项全部注入。
Constructor注入为创建实例的第一选项。
Constructor注入可以解决循环依赖。
Constructor注入是Spring框架极力倡导使用的方式。
Constructor注入不变的。
——————————————————————————————————————————————
所以警告的内容为field injection is not recommended不推荐使用Field注入那应该推荐使用什么方式注入呢
答案是在Spring框架里面肯定是极力推荐 Constructor注入的方式。
由于此处使用的是 Autowired 注解 Filed 注入为了方便且不报错所以把 Autowired 注解改成 Resource 注解 Filed 注入即可。 二、Resource和Autowired注解的区别
区别1
身世不同
Autowired 出自 Spring 框架只支持Spring框架。Resource 出自于Java标准JSR-250绝大部分框架都支持。
区别2
注入方式不同
Autowired 支持 Filed 注入、Setter 注入和 Constructor 注入。Resource 只支持 Filed 注入和 Setter 注入。
区别3
依赖查找顺序不同
Autowired 先根据类型再根据名称查询。Resource 先根据名称再根据类型查询。
区别4
支持的参数不同
Autowired 只支持设置 1 个参数。Resource 支持设置 7 个参数。 三、Resource和Autowired注解的推荐用法
Resource 倾向于确定性的单一资源。
Autowired 为类型去匹配符合此类型的所有资源。
如集合注入建议使用 Autowired。
Autowired 的推荐用法
1使用构造函数注入或者 lombok 的 RequiredArgsConstructorprivate final。
2使用set注入或者 lombok 的 Setter。