@Autowire与@Resource用法
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";
}
}
- 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”;
};
}
- 启动 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");
}
}
- 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用法相关推荐
- @Autowire与@Resource用法以及它们的区别
前言:平常使用这个两个注解的时候就是相当然的使用,没有去具体比价两者的区别,在网上查阅了资料,加自己测试后,记录一下. 首先,这个两个注解都是用来完成组件的装配的,即利用依赖注入(DI),完成对ioc ...
- Spring注解@Component、@Repository、@Service、@Controller,@Autowired、@Resource用法
一.Spring定义bean,@Component.@Repository.@Service 和 @Controller Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥 ...
- 一次性讲清 Spring 常用注解 @Bean 、 @Component 、@Autowire、@Resource 的区别, 你知道吗?
本文打算介绍几个不太容易说出其区别,或者用途的 Spring 注解,比如 @Component 与 @Bean 的比较,@ControllerAdvice 是如何处理自定义异常的等等. Spring ...
- Spring注解驱动开发学习总结8:自动装配注解@Autowire、@Resource、@Inject
Spring注解驱动开发学习总结8:自动装配注解@Autowire.@Resource.@Inject 1.自动装配@Autowire.@Resource.@Inject 1.1 构建bookDao ...
- @Autowire和@Resource区别
介绍 @Autowire和@Resource都是Spring支持的注解方式动态装配bean. 详解 @Autowire @Autowire默认按照类型(by-type)装配,默认情况下要求依赖对象必须 ...
- Autowire 和 @Resource 的区别
1.@Autowire 和 @Resource都可以用来装配bean,都可以用于字段或setter方法. 2.@Autowire 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许 nul ...
- @Autowire和@Resource
注解@Autowire和@Resource,我们都知道都可以用来装配bean,将对象加载到容器之中,但是他们具体有什么区别,现在简单说明一下这俩个注解的区别. @Autowired @Autowire ...
- @Autowire 和 @Resource 的区别
1.@Autowire 和 @Resource都可以用来装配 bean,都可以用于字段或 setter 方法. 2.@Autowire 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许 ...
- @Autowire和@Resource注解使用的正确姿势,别再用错的了!!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:liuxuzxx juejin.cn/post/68 ...
最新文章
- (C++)A+B 输入输出练习V 输入的第一行是一个正数N,表示后面有N行。每一行的第一个数是M,表示本行后面还有M个数。
- Ubuntu开启FTP服务方法(Ubuntu和Windows之间互传文件需要开启——服务器端)
- netty客户端源码
- 明微电子发布2021年三季度财报
- linux java解压文件怎么打开,linux下面的解压缩文件的命令
- 数据决策力是驱动企业发展的原动力
- C++开发斗地主(QT)第五篇之牌型权重
- 中兴新支点操作系统_国产操作系统崛起之作 中兴新支点OS解析
- hashmap怎么保证线程安全的方式
- printJs 打印HTML 去掉页眉页脚
- 你也可以掌控EMI:EMI基础及无Y电容手机充电器设计
- 如何高效地从BAM文件中提取fastq
- Android——实现m3u8视频缓存
- 【opencv-python】视频处理(4) cv2.VideoCapture.get()函数、cv2.VideoCapture.set()函数
- leetcode记录-340-至多包含 K 个不同字符的最长子串-双指针
- 参考文献格式,依据 GB/T 7714-2015
- 如何实现给PDF文件添加图片
- 库克逼腾讯分成30%遭拒,苹果APP Store或将微信下架!
- 猿辅导python辅导老师_【猿题库/猿辅导课程设计面试】python 教研不推荐去猿辅导-看准网...
- 论文查重标题写错了怎么办?