Spring中@Autowired@Resource和@Inject注解区别

首先说明ByType和ByName的区别:

ByType也就是当spring容器中只有一个Bean时,才会使用ByType,否则会报错

byName:根据属性名称来匹配Bean的名称进行自动装配。

@Autowired:来源于spring框架自身默认是byType自动装配,当配合了@Qualifier注解之后,

由@Qualifier实现byName装配。它有一个required属性,用于指定是否必须注入成功,默认为true。

java 复制代码
package com.spring.service.impl;

import com.spring.dao.AccountDao;
import com.spring.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

@Service("accountService")
public class AccountServiceImpl implements AccountService {
    @Autowired
    @Qualifier("accountDaoImplTwo")
    private AccountDao accountDao;
    @Override
    public void saveAccount() {
        accountDao.saveAccount();
    }
}
java 复制代码
package com.spring.dao.impl;

import com.spring.dao.AccountDao;
import org.springframework.stereotype.Repository;

@Repository
public class AccountDaoImplOne implements AccountDao {
    @Override
    public void saveAccount() {
        System.out.println("one保存了账户信息");
    }
}
java 复制代码
package com.spring.dao.impl;

import com.spring.dao.AccountDao;
import org.springframework.stereotype.Repository;

@Repository
public class AccountDaoImplTwo implements AccountDao {
    @Override
    public void saveAccount() {
        System.out.println("two保存了账户信息");
    }
}

测试类

java 复制代码
import com.spring.service.AccountService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext("com.spring");
        AccountService accountService = ac.getBean("accountService",AccountService.class);
        accountService.saveAccount();

    }
}

调试结果

@Resource:在没有指定name属性时是byType自动装配,当指定了name属性之后,采用byName方式自动装配。

@Inject:可以配合@Qualifier或者@Primary注解使用。默认是采用byType装配,当指定@Named注解之后,变成byName装配。属性:无使用场景

在使用@Autowired注解的地方,都可以替换成@Inject。它也可以出现在方法上,构造函数上和字段上

@Autowired注解时spring的ioc容器中的特有注解,只能在spring框架中使用,但是@Inject注解没有特殊限制

相关推荐
XiaoLeisj19 分钟前
【优选算法 — 滑动窗口】最大连续1的个数 & 将 x 减到0的最小操作数
java·开发语言·算法·leetcode
YRr YRr21 分钟前
ubuntu20.04 ROS 临时修改功能包名并作一系列对应修改 (ubuntu20.04)
java·开发语言
一颗星星辰1 小时前
数据结构 | 题目练习第三章 | 有效的括号 | 用队列实现栈
java·linux·数据结构
♡喜欢做梦1 小时前
【数据结构】ArrayList的具体实现:简单的洗牌算法--Java
java·数据结构·算法·链表
aiee1 小时前
Golang时间函数
开发语言·后端·golang
G皮T2 小时前
【设计模式】行为型模式(一):模板方法模式、观察者模式
java·观察者模式·设计模式·模板方法模式·template method·行为型模式·observer
努力进修2 小时前
“高级Java编程复习指南:深入理解并发编程、JVM优化与分布式系统架构“
java·jvm·架构
蜗牛沐雨2 小时前
Go语言中的`io.Pipe`:实现进程间通信的利器
开发语言·后端·golang·进程通信·pipe
Peter_chq2 小时前
【计算机网络】网络框架
linux·c语言·开发语言·网络·c++·后端·网络协议
wuh23332 小时前
golang-基础知识(函数)
开发语言·后端·golang