1.0 spring的配置文件 spring-context.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--启用注解-->
<context:component-scan base-package="com.test" />
<!--<aop:aspectj-autoproxy/>-->
<!-- 属性文件读入 -->
<bean id="nameInfo" class="java.util.LinkedHashMap" name="nameInfo"><constructor-arg><map key-type="java.lang.String" value-type="java.lang.String"><entry key="firstName" value="x"></entry><entry key="lastName" value="yd"></entry></map></constructor-arg>
</bean><bean id="nameInfo1" class="java.util.LinkedHashMap" name="nameInfo1"><constructor-arg><map key-type="java.lang.String" value-type="java.lang.String"><entry key="first" value="1"></entry><entry key="last" value="2"></entry></map></constructor-arg>
</bean>

2. Bean1.java package com.test;

import org.springframework.stereotype.Component;

import java.util.LinkedHashMap;

@Component(“name1”)
public class Bean1 {
private LinkedHashMap<String,String> nameInfo;

public LinkedHashMap<String, String> getNameInfo() {return nameInfo;
}public void setNameInfo(LinkedHashMap<String, String> nameInfo) {this.nameInfo = nameInfo;
}
public String say(){return "Bean1";
}

}
2. Bean2.java
package com.test;

import org.springframework.stereotype.Component;

@Component(“bean2”)
public class Bean2 extends Bean1{

@Override
public String say(){return "I'm bean2 ok";
}

}

  1. Bean3.java
    package com.test;

import org.springframework.stereotype.Component;

@Component(“bean3”)
public class Bean3 extends Bean1 {
@Override
public String say(){
return “I’m Bean3 OK”;
};
}

  1. 启动 moudle2.java
    package com.test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.LinkedHashMap;

@Component(“md2”)
public class Moudle2 {

@Resource
private LinkedHashMap<String,String > nameInfo;
public static void main(String[] args) {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");Moudle2 m2 = (Moudle2)applicationContext.getBean("md2");System.out.println( m2.getMap());
}public String getMap(){return nameInfo.get("firstName");
}
public void gerMoudle2(){System.out.println("恭喜你获得了moudle2");
}

}

  1. test
    package com.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import static org.junit.Assert.*;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/spring-context.xml")
public class Moudle2Test {

// @Resource
// private HashMap<String,String> nameInfo1;

// @Resource
// private Bean1 bean123;

@Resource(name = "name1")
private Bean1 bean2;
@Test
public void getMap() {

// System.out.println(nameInfo1.get(“firstName”));
// System.out.println(bean123.getNameInfo().get(“firstName”));
System.out.println(bean2.getNameInfo().get(“lastName”));
System.out.println(bean2.say());
}
}

一. bean中的id的作用
@Autowire 先按类型匹配 在按名字匹配
假设在配置文件中的

假设在一个类中有这样的一个注入
@Autowire
private BeanA bean;
如果只有一个BeanA 那么自动按类型注入就会成功

如果像上面那样 有两个BeanA 那么就会先按类型 然后按变量名匹配bean 的 ID,
就像上面
@Autowire
private BeanA bean; 系统就会报错
如果是
@Autowire
private BeanA bean1; 就会匹配
如果是
private BeanA bean2; 就会匹配

二. bean中 name的作用

还是上面的例子

如果我们这样注入
@Resource
private BeanA bean;
@Resource 首先是根据变量名bean匹配name 查bean工厂查到没有name为bean的 bean
并且还有两个类型为BeanA的bean spring不知道该注入那个bean所以会报错
如果这么写
@Resource(name = “name1”)
private BeanA bean;

这时候spring就能根据name找到这个bean
就会注入

@Autowire与@Resource用法相关推荐

  1. @Autowire与@Resource用法以及它们的区别

    前言:平常使用这个两个注解的时候就是相当然的使用,没有去具体比价两者的区别,在网上查阅了资料,加自己测试后,记录一下. 首先,这个两个注解都是用来完成组件的装配的,即利用依赖注入(DI),完成对ioc ...

  2. Spring注解@Component、@Repository、@Service、@Controller,@Autowired、@Resource用法

    一.Spring定义bean,@Component.@Repository.@Service 和 @Controller Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥 ...

  3. 一次性讲清 Spring 常用注解 @Bean 、 @Component 、@Autowire、@Resource 的区别, 你知道吗?

    本文打算介绍几个不太容易说出其区别,或者用途的 Spring 注解,比如 @Component 与 @Bean 的比较,@ControllerAdvice 是如何处理自定义异常的等等. Spring ...

  4. Spring注解驱动开发学习总结8:自动装配注解@Autowire、@Resource、@Inject

    Spring注解驱动开发学习总结8:自动装配注解@Autowire.@Resource.@Inject 1.自动装配@Autowire.@Resource.@Inject 1.1 构建bookDao ...

  5. @Autowire和@Resource区别

    介绍 @Autowire和@Resource都是Spring支持的注解方式动态装配bean. 详解 @Autowire @Autowire默认按照类型(by-type)装配,默认情况下要求依赖对象必须 ...

  6. Autowire 和 @Resource 的区别

    1.@Autowire 和 @Resource都可以用来装配bean,都可以用于字段或setter方法. 2.@Autowire 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许 nul ...

  7. @Autowire和@Resource

    注解@Autowire和@Resource,我们都知道都可以用来装配bean,将对象加载到容器之中,但是他们具体有什么区别,现在简单说明一下这俩个注解的区别. @Autowired @Autowire ...

  8. @Autowire 和 @Resource 的区别

    1.@Autowire 和 @Resource都可以用来装配 bean,都可以用于字段或 setter 方法. 2.@Autowire 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许 ...

  9. @Autowire和@Resource注解使用的正确姿势,别再用错的了!!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:liuxuzxx juejin.cn/post/68 ...

最新文章

  1. (C++)A+B 输入输出练习V 输入的第一行是一个正数N,表示后面有N行。每一行的第一个数是M,表示本行后面还有M个数。
  2. Ubuntu开启FTP服务方法(Ubuntu和Windows之间互传文件需要开启——服务器端)
  3. netty客户端源码
  4. 明微电子发布2021年三季度财报
  5. linux java解压文件怎么打开,linux下面的解压缩文件的命令
  6. 数据决策力是驱动企业发展的原动力
  7. C++开发斗地主(QT)第五篇之牌型权重
  8. 中兴新支点操作系统_国产操作系统崛起之作 中兴新支点OS解析
  9. hashmap怎么保证线程安全的方式
  10. printJs 打印HTML 去掉页眉页脚
  11. 你也可以掌控EMI:EMI基础及无Y电容手机充电器设计
  12. 如何高效地从BAM文件中提取fastq
  13. Android——实现m3u8视频缓存
  14. 【opencv-python】视频处理(4) cv2.VideoCapture.get()函数、cv2.VideoCapture.set()函数
  15. leetcode记录-340-至多包含 K 个不同字符的最长子串-双指针
  16. 参考文献格式,依据 GB/T 7714-2015
  17. 如何实现给PDF文件添加图片
  18. 库克逼腾讯分成30%遭拒,苹果APP Store或将微信下架!
  19. 猿辅导python辅导老师_【猿题库/猿辅导课程设计面试】python 教研不推荐去猿辅导-看准网...
  20. 论文查重标题写错了怎么办?

热门文章

  1. 文件上传漏洞 — 解析、验证、伪造
  2. 女程共勉:必须证明自己是真正的优秀
  3. 每日简报 5月26日简报新鲜事 每天一分钟 了解新鲜事
  4. python实现网络游戏NPC任务脚本引擎(带限时任务功能)
  5. iconify图标使用
  6. 她是北大“一个人的毕业照”主人公,2010级古生物专业独苗,十年后搞起了AI...
  7. JPEG编解码分析及调试
  8. 破解WEP密钥过程全解 (下)
  9. Linux下touch命令详解及C/C++代码实现
  10. 视频剪辑 多个视频片头减时、片尾减时怎么操作