现在有一些流言,想必大多都是非Java程序员对Java程序员的称谓或者嘲讽:“spring boy”。
创新互联公司专业为企业提供龙湖网站建设、龙湖做网站、龙湖网站设计、龙湖网站制作等企业网站建设、网页设计与制作、龙湖企业网站模板建站服务,十年龙湖做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
相信现在大家基本上都是使用的基于spring或者SpringBoot框架构建公司的各种业务应用,这个称谓对我们来说也没有啥了。
不过就有一种嘲讽的意思是脱离了Spring我们就不能开发了。
不知道大家是什么感受,不过了不起不以为然,没了spring就自己定义一套处理流程...
不过目前了不起也还是使用spring生态,今天有个项目中出现了三种注入bean的方式,@Resource、@Autowired、private final,我们一起来看一看吧。
这里是一个简单的示例代码,演示了 @Resource、@Autowired和 private final三种注入方式的使用:
publicclassMyService{
@Resource
private MyDependency resourceDependency;
@Autowired
private MyDependency autowiredDependency;
privatefinal MyDependency finalDependency;
publicMyService(MyDependency finalDependency){
this.finalDependency = finalDependency;
}
// ...
}
publicclassMyDependency{
// ...
}
在上面的示例中,MyService类使用了三种不同的方式来注入 MyDependency依赖。
@Resource和 @Autowired注解用于注入可变的依赖,而 private final方式用于注入不可变的依赖。
这三种方式都是目前注入bean的方式,也常被面试官提及发问,不管你使用哪种方式,都是可以的。
@Resource的原理:@Resource注解是Java标准库提供的一种依赖注入方式。
在Spring中,@Resource注解的处理由 CommonAnnotationBeanPostProcessor类负责。
该类是一个Bean后置处理器,用于处理使用了 @Resource注解的字段或方法参数。
CommonAnnotationBeanPostProcessor在Spring的容器初始化过程中起作用,它会扫描所有的Bean定义,并检查是否存在使用了 @Resource注解的字段或方法参数。
当检测到这样的注解时,它会解析注解中指定的名称(name),并尝试查找匹配的依赖。
具体地说,CommonAnnotationBeanPostProcessor使用了Java的反射机制来解析注解,并通过 javax.annotation.Resource规范中定义的算法来查找匹配的依赖。根据规范,@Resource注解默认按照字段或方法参数的名称进行依赖的匹配,也可以通过 name属性指定特定的依赖名称。
@Resource的使用方式:@Resource注解可以用于字段、方法和构造函数上,用于指定要注入的依赖。下面是几种常见的使用方式:
publicclassMyService{
@Resource
private MyDependency dependency;
// ...
}
publicclassMyService{
private MyDependency dependency;
@Resource
publicvoidsetDependency(MyDependency dependency){
this.dependency = dependency;
}
// ...
}
publicclassMyService{
private MyDependency dependency;
@Resource
publicMyService(MyDependency dependency){
this.dependency = dependency;
}
// ...
}
在上述示例中,@Resource注解用于标记要注入的依赖,并根据默认的名称匹配规则或显式指定的名称来查找依赖。
需要注意的是,@Resource注解是Java标准库中的注解,因此它可以与Java SE和Java EE应用程序一起使用,不仅限于Spring框架。
总结起来,@Resource注解是Java标准库提供的一种依赖注入方式,在Spring中借助 CommonAnnotationBeanPostProcessor来实现。它可以用于标记要注入的依赖,并根据名称匹配规则或显式指定的名称来查找依赖。
当涉及到 @Autowired注解的原理、使用方式以及与 @Resource注解的区别时,我们需要了解它在Spring中的实现方式。下面我将详细解释 @Autowired的原理、使用方式以及与 @Resource注解的区别。
@Autowired注解是Spring Framework提供的一种依赖注入方式。它通过 AutowiredAnnotationBeanPostProcessor类来实现。AutowiredAnnotationBeanPostProcessor是一个Bean后置处理器,用于处理使用了 @Autowired注解的字段、方法或构造函数参数。
在Spring的容器初始化过程中,AutowiredAnnotationBeanPostProcessor会扫描所有的Bean定义,检查是否存在使用了 @Autowired注解的字段、方法或构造函数参数。当检测到这样的注解时,它会解析注解,并根据依赖的类型来寻找匹配的Bean,并将其注入到目标对象中。
具体来说,AutowiredAnnotationBeanPostProcessor使用了Java的反射机制来解析 @Autowired注解,并利用Spring容器中的Bean定义信息来查找匹配的依赖。它支持按照类型、名称和限定符等方式进行依赖的解析和注入。
@Autowired注解可以用于字段、方法和构造函数上,用于指定要注入的依赖。下面是几种常见的使用方式:
public class MyService {
@Autowired
private MyDependency dependency;
// ...
}
```
public class MyService {
private MyDependency dependency;
@Autowired
public void setDependency(MyDependency dependency) {
this.dependency = dependency;
}
// ...
}
```
public class MyService {
private MyDependency dependency;
@Autowired
public MyService(MyDependency dependency) {
this.dependency = dependency;
}
// ...
}
```
在上述示例中,@Autowired注解用于标记要注入的依赖。Spring会根据依赖的类型(或名称和限定符)自动查找匹配的Bean,并将其注入到目标对象中。
尽管 @Autowired和 @Resource都是用于依赖注入的注解,但它们在一些方面有一些区别。
需要注意的是,尽管 @Autowired和 @Resource有一些区别,但在大多数情况下,它们可以互换使用。
如果您只是简单地进行依赖注入,并且不需要关注兼容性问题,那么两者的选择取决于个人偏好。
在Spring Boot中,对于 private final字段的自动注入,Spring使用构造函数注入(Constructor Injection)来实现。当一个Bean有一个或多个 private final字段需要注入时,Spring会尝试在容器中查找与这些字段类型匹配的Bean,并使用构造函数注入来实例化Bean对象。
构造函数注入的原理是,Spring会查找与构造函数参数类型匹配的Bean,并将它们作为参数传递给构造函数,从而实现对 private final字段的赋值。
在使用 private final字段进行自动注入时,需要遵循以下几个步骤:
@Component
public class MyService {
private final MyDependency dependency;
public MyService(MyDependency dependency) {
this.dependency = dependency;
}
// ...
}
```
需要注意的是,由于 private final字段是不可变的,一旦注入后就无法修改。这种不可变性有助于确保字段的安全性和线程安全性。
了不起和大家聊的springBean三种注入方式大家都烂熟于心了,具体使用还是看个人喜好,并无优劣之分。
分享标题:private final、@Autowired、@Resource你更喜欢哪个?
分享路径:http://www.mswzjz.com/qtweb/news4/209854.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联