注解 @Resource

本文详细对比了Java中@Autowired与@Resource注解的区别,解释了它们如何实现依赖注入,并提供了配置示例。

在java代码中使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是:@Autowired 默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
    @Autowired
    private PersonDao  personDao;//用于字段上
    @Autowired
    public void setOrderDao(OrderDao orderDao) {//用于属性的setter方法上
        this.orderDao = orderDao;
    }
@Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
    @Autowired  @Qualifier("personDaoBean")
    private PersonDao  personDao;
@Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。
    @Resource(name=“personDaoBean”)
    private PersonDao  personDao;//用于字段上
注意:如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。
 
 
步骤:
(1).修改beans.xml
Java代码 
在java代码中使用@Autowired或@Resource注解方式进行装配。但我们需要在xml配置文件中配置以下信息:  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:context="http://www.springframework.org/schema/context"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
           http://www.springframework.org/schema/context  
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
          <context:annotation-config/>  
</beans>  
 这个配置隐式注册了多个对注释进行解析处理的处理器:AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor
      注: @Resource注解在spring安装目录的lib\j2ee\common-annotations.jar
 
   <context:annotation-config/>  必不可少
### Java注解@Resource介绍、使用方法 - **介绍**:@Resource 是 Java EE 标准(JSR - 250)定义的依赖注入注解,Spring 框架对其进行了支持。核心作用是通过名称或类型匹配 Bean,解决多 Bean 场景下的依赖注入问题 [^1]。 - **使用方法**:可用于成员变量以及 set 方法。若不指定 name 属性,则会把 name 属性值处理为字段名或 set 方法标识的字段名称;若指定 type 属性,则 type 属性值必须与字段类型或 set 方法返回值类型为父子关系(type 属性值可以是子类,也可以是超类),否则会抛出异常。@Resource 先按照 name 属性值注入,若未找到,则按 type 属性值注入,即默认的 name 或指定的 name 找不到 bean,就会按 type 注入 [^3]。 以下是一个简单的使用示例: ```java import javax.annotation.Resource; public class MyClass { // 不指定name属性,默认按字段名注入 @Resource private MyBean myBean; // 指定name属性注入 @Resource(name = "anotherBean") private AnotherBean anotherBean; // 指定type属性注入 @Resource(type = SomeInterface.class) private SomeInterface someInterface; } ``` ### Java注解@Lazy介绍、使用方法 - **介绍**:@Lazy 注解用于实现懒加载。当与 @Autowired 或者 @Resource 合用时,依赖创建的是代理对象(目标对象是 TargetSource),在执行时,执行的是代理对象,在 `invoke(Object proxy, Method method, Object[] args)` 中执行 `targetSource.getTarget()` 时才去 beanFactory 中依赖查找 bean [^2]。 - **使用方法**:通常与 @Autowired 或 @Resource 一起使用,也可以用于配置类的 Bean 定义上。 以下是使用示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; @Component public class MyService { // 与@Autowired合用 @Autowired @Lazy private MyRepository myRepository; } ``` ### @Resource和@Lazy的区别 - **功能不同**:@Resource 主要用于依赖注入,解决多 Bean 场景下的依赖注入问题;而 @Lazy 主要用于实现懒加载,延迟 Bean 的创建 [^1][^2]。 - **使用场景不同**:@Resource 用于需要注入 Bean 的地方,如成员变量、set 方法;@Lazy 通常与依赖注入注解一起使用,或者用于配置类的 Bean 定义,实现 Bean 的延迟加载 [^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值