@Autowired和@Resource的区别用法

简介: @Autowired和@Resource的区别用法

@Autowired和@Resource的区别用法

1、@Resource注解

@Resource 没有指定 name 和 type ,则先使用byName注入策略, 如果匹配不上, 再使用 byType 策略, 如果都不成功,就会报错。

public class UserAction {
//    @Autowired
    @Resource(type = UserService.class)
    private UserService userService400;//如果按照类型,要求容器中只能有一个对象
    public void sayOk(){
        System.out.println("UserService="+userService400);
        userService400.hi();
    }
    public void setUserService(UserService userService) {
        this.userService400 = userService;
    }
}

错误示范:

<bean class="com.linghu.service.UserService" id="userService100"/>
    <bean class="com.linghu.service.UserService" id="userService200"/>
    <bean class="com.linghu.service.UserService" id="userService300"/>

错误原因:这里的 @Resource(type = UserService.class)表示这个注解通过类型进行自动装配注入。类型就是 UserService对象类型的,去bean里扫描,如果找到bean的类型有重复的 UserService的就会注入失败~

正确示范:

<bean class="com.linghu.service.UserService" id="userService100"/>//容器只有一个对象
<!--    <bean class="com.linghu.service.UserService" id="userService200"/>-->
<!--    <bean class="com.linghu.service.UserService" id="userService300"/>-->

如果按照name属性:

public class UserAction {
//    @Autowired
    @Resource(name = "userService01")//去容器里找name相同的bean对象
    private UserService userService400;//
    public void sayOk(){
        System.out.println("UserService="+userService400);
        userService400.hi();
    }
    public void setUserService(UserService userService) {
        this.userService400 = userService;
    }
}

正确示范:

<bean class="com.linghu.service.UserService" id="userService100"name="userService01"/>
public class Springtest {
    public static void main(String[] args) {
        ApplicationContext gt =
                new ClassPathXmlApplicationContext("beans03.xml");
        Object userService100 = gt.getBean("userService100");//通过类型获取bean对象
        System.out.println("UserService="+us);
    }
}

2、@Autowired注解

@Controller("userAction01")//bean 的 id=userAction01
public class UserAction {
    @Autowired
    private UserService userService;//将Userservice对象注入到UserAction中,可以调用UserService的方法了。相当于在这个类new了一个UserService类的对象。
    public void sayOk(){
        System.out.println("UserService="+userService);
        userService.hi();
    }
}

在Bean文件配置如下: 加入两个自动扫描,扫描两个子包 componentservice下的组件类。就不用设置bean对象了,因为bean对象已经被上面的注解代替了。

<context:component-scan base-package="com.linghu.component"/>
  <context:component-scan base-package="com.linghu.service"/>
public class Springtest {
    public static void main(String[] args) {
        ApplicationContext gt =
                new ClassPathXmlApplicationContext("beans03.xml");
        UserAction userAction = (UserAction) gt.getBean(UserAction.class);//获取对象
      //UserAction userAction = (UserAction) gt.getBean("userAction01");//也可以这样获取对象
        System.out.println(userAction);
        userAction.sayOk();
    }
}


目录
相关文章
|
9天前
|
Java Spring 容器
@Resource 和 @Autowired 介绍 为什么使用 @Autowired 会报错,改成@Resource 就对了
本文介绍了`@Autowired`和`@Resource`两种依赖注入注解的区别及使用场景,并解释了为什么在某些情况下使用`@Autowired`会导致错误,而改成`@Resource`则可以解决问题。
58 0
|
4月前
|
安全 Java 编译器
springboot @resource与private final声明式的有何区别??
【6月更文挑战第3天】在Spring Boot中,@Resource 和 private final 常用于依赖注入,但它们的用途和行为有一些重要的区别。
149 1
|
4月前
|
Java Spring 容器
真的!@Autowired和@Resource注解使用的正确姿势,别再用错的了!
真的!@Autowired和@Resource注解使用的正确姿势,别再用错的了!
34 0
|
5月前
|
Java Spring 容器
@Resource 和 @Autowired区别是什么?
@Resource 和 @Autowired区别是什么?
|
5月前
|
Java Spring 容器
@Resource注解是什么作用,和@bean区别是什么?
@Resource注解是什么作用,和@bean区别是什么?
130 0
@RequiredArgsConstructor(onConstructor=@_(@Autowired))是什么语法?
@RequiredArgsConstructor(onConstructor=@_(@Autowired))是什么语法?
191 0
|
Java Spring
【Java注解用法】@Autowired 与@Resource的区别以及@Qualifier的介绍
【Java注解用法】@Autowired 与@Resource的区别以及@Qualifier的介绍
84 0
|
Java 编译器 Spring
Spring框架@Autowired和@Resource到底有什么区别
Spring框架@Autowired和@Resource到底有什么区别
506 0
|
Java Spring
解析Spring注解:@Resource与@Autowired的区别
在Spring框架中,依赖注入是实现松耦合、可维护性高的应用的重要方式之一。`@Resource`和`@Autowired`是两个常用的注解,用于实现依赖注入。然而,它们在用法和特点上有所不同。本文将详细介绍`@Resource`和`@Autowired`之间的区别,以及在Spring应用中的应用场景。
296 0
|
开发框架 Java Spring
@Autowired与@Resource有何区别?
@Autowired与@Resource有何区别?
89 0