package com.example.ylk.springleran;
import com.example.ylk.springleran.controller.AutoTest;
//import com.example.ylk.springleran.service.AutoTest;
import com.example.ylk.springleran.service.InterfaceA;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@SpringBootApplication
public class SpringleranApplication {
//@Autowired 通过类型匹配 通过在@service等注册时加入value名字和@Qualifier来实现同名匹配 也可以配合@Primary 不过@Qualifier优先级更高
//@Resource beanName匹配 没有指定name 就按类型匹配 存在同名一定要通过name指定名字
//没有指定 @Qualifier 也没有@Primary 不知道找哪一个
// @Autowired
// InterfaceA c;
// 这里要使用接口
// @Autowired
// @Qualifier(value = "A")
// InterfaceA a;
//
// @Autowired
// @Qualifier(value = "B")
// InterfaceA b;
// 不加@Qualifier 有@Primary默认选第一个
/*
@Autowired
//@Qualifier(value = "A")
InterfaceA a;
@Autowired
//@Qualifier(value = "B")
InterfaceA b;
*/
//有@Primary 且指定的A 这是 @Qualifier指定B 还是会选B @Qualifier优先级高
// 这里要使用接口 因为 @Qualifier(value = "B")找的是B 你的类型是A 无法注入
@Autowired
@Qualifier(value = "B")
InterfaceA a;
@Autowired
//@Qualifier(value = "B")
InterfaceA b;
@Resource(name = "A")
InterfaceA aa;
// 若是没有注册过的bean 指定required = false 否则会出现找不到
@Autowired(required = false)
C c;
public static void main(String[] args) {
//SpringApplication.run(SpringleranApplication.class, args);
ApplicationContext applicationContext = SpringApplication.run(SpringleranApplication.class, args);;
// AutoTest demoService = (AutoTest) applicationContext.getBean("sdsd");
// demoService.setAge(12);
// demoService.setName("uuy");
// System.out.println(demoService.getAge());
AutoTest demoService2 = applicationContext.getBean(AutoTest.class);
demoService2.setAge(12);
demoService2.setName("uuy");
System.out.println(demoService2.getAge());
SpringleranApplication SpringleranApplication = applicationContext.getBean(SpringleranApplication.class);
SpringleranApplication.test();
}
public void test(){
System.out.println(a.sayhi());
System.out.println(b.sayhi());
}
}
@Service(value = "A")
//@Primary
class A implements InterfaceA {
@Override
public String sayhi() {
return "hihi";
}
}
@Service(value = "B")
class B implements InterfaceA{
@Override
public String sayhi() {
return "hello";
}
}
class C implements InterfaceA{
@Override
public String sayhi() {
return "nono";
}
}
@Autowired @Resource @Qualifier @Primary 注解理解
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- @Autowired 在使用spring开发过程中,我们基本上都是使用 @Autowired 这个注解,用来注入已...
- @Autowired自动装配 上面的例子会抛出异常NoUniqueBeanDefinitionException,...
- 二、比较@Resource、@Autowired @Resource @Resource默认按byName自动注入...
- 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事务,这么做有两个缺点:...
- 参考:1 Spring5:@Autowired注解、@Resource注解和@Service注解