@Autowired 和 @Resource 思考

@Autowired 和 @Resource 思考

哪个用的比较多?

Spring框架中,@Autowired注解的使用更为广泛和常见。@Autowired是Spring框架提供的注解,它提供了更灵活的自动装配功能,可以按照类型进行匹配,并且支持在构造函数、成员变量、方法和参数上进行注入。它是Spring开发中的核心注解之一,被广泛应用于各个层面的组件注入。

@Resource注解是Java EE标准中的注解,它也可以用于依赖注入和资源注入,但是相比@Autowired注解,@Resource的功能较为简单。@Resource注解可以按照名称或类型进行匹配,但是它的功能和灵活性相对较弱,通常在特定的情况下使用。

总体而言,@Autowired注解使用较为广泛,并且在Spring开发中是首选的注入方式。但在特定场景下,如使用Java EE标准或需要按照名称进行注入时,@Resource注解也是一种可选的注入方式。选择使用哪个注解主要取决于具体的开发环境和需求。

@Autowired 和 @Resource使用区别 详细介绍

@Autowired和@Resource是Java中常用的两个注解,用于实现依赖注入(Dependency Injection)和资源注入(Resource Injection)。它们的使用和行为略有不同,下面我将详细介绍它们之间的区别。

@Autowired注解是由Spring框架提供的,用于自动装配(Autowired)Bean的依赖关系。它可以应用于构造方法、成员变量、方法和参数上。当Spring容器扫描到带有@Autowired注解的元素时,会自动将匹配的Bean注入到该元素中。匹配是根据类型进行的,如果存在多个符合类型的Bean,Spring会尝试按照其他规则(如变量名、限定符等)进行匹配。

下面是@Autowired注解的一些特点和使用方式:

默认情况下,@Autowired注解是按照类型进行自动装配的,如果找不到匹配的Bean或存在多个匹配的Bean,会抛出异常。可以通过设置@Autowired的required属性为false来允许依赖注入为空。
当多个Bean都匹配时,可以使用@Qualifier注解指定具体的Bean名称,用于精确匹配。
可以应用于构造方法,用于自动装配Bean的构造函数。
可以应用于成员变量,用于自动装配Bean的属性。
可以应用于方法,用于自动装配Bean的方法参数。
可以应用于参数,用于自动装配方法参数。
@Resource注解是Java EE标准中定义的注解,用于实现依赖注入和资源注入。它可以应用于字段、方法和构造函数上,并且可以通过指定名称或类型来进行匹配。与@Autowired注解不同,@Resource既可以按照名称进行匹配,也可以按照类型进行匹配。

下面是@Resource注解的一些特点和使用方式:

可以通过指定name属性或type属性来指定要注入的Bean。
当通过name属性指定Bean名称时,会按照名称进行匹配。如果找不到匹配的Bean,会抛出异常。
当通过type属性指定Bean类型时,会按照类型进行匹配。如果存在多个匹配的Bean,会选择其中一个进行注入,具体选择规则可以通过@Resource的一些其他属性进行指定。
默认情况下,@Resource注解是按照名称进行匹配的,如果指定了type属性,则按照类型进行匹配。
可以应用于字段,用于自动装配Bean的属性。
可以应用于方法,用于自动装配Bean的方法参数。
可以应用于构造函数,用于自动装配Bean的构造函数参数。
总结:
@Autowired和@Resource都可以用于实现依赖注入,但是@Autowired是Spring

代码例子

当使用@Autowired注解时,可以按照以下示例进行注入:

构造函数注入:
java
Copy code
public class MyClass {
private MyDependency myDependency;

@Autowired
public MyClass(MyDependency myDependency) {
this.myDependency = myDependency;
}

// …
}
成员变量注入:
java
Copy code
public class MyClass {
@Autowired
private MyDependency myDependency;

// …
}
方法注入:
java
Copy code
public class MyClass {
private MyDependency myDependency;

@Autowired
public void setMyDependency(MyDependency myDependency) {
this.myDependency = myDependency;
}

// …
}
参数注入:
java
Copy code
public class MyClass {
private MyDependency myDependency;

@Autowired
public void doSomething(MyDependency myDependency) {
this.myDependency = myDependency;
// …
}

// …
}
当使用@Resource注解时,可以按照以下示例进行注入:

根据名称注入:
java
Copy code
public class MyClass {
@Resource(name = “myDependency”)
private MyDependency myDependency;

// …
}
根据类型注入:
java
Copy code
public class MyClass {
@Resource
private MyDependency myDependency;

// …
}
方法注入:
java
Copy code
public class MyClass {
private MyDependency myDependency;

@Resource
public void setMyDependency(MyDependency myDependency) {
this.myDependency = myDependency;
}

// …
}
参数注入:
java
Copy code
public class MyClass {
private MyDependency myDependency;

public void doSomething(@Resource MyDependency myDependency) {
this.myDependency = myDependency;
// …
}

// …
}
注意:上述示例中的MyDependency是一个被注入的依赖对象,具体的类和定义需要根据实际情况进行编写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值