java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > @Autowired的使用

关于@Autowired的使用及注意事项

作者:JinF~

这篇文章主要介绍了关于@Autowired的使用及注意事项,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

@Autowired 注意事项

简单来说就是 在类型正确的前提下,先根据名字找,没找到时再根据类型找

例子如下:

如果容器中存在一个bean,这个bean的类型和id与被标注@Autowired的属性或者方法参数的类型和名称相同,那么此时的@Autowired相当于

@Autowired
@Qualifier("属性名")

例如:

存在一个接口TestInterface,有两个实现类分别是TestClass1TestClass2都在spring容器中,此时有一个SomeClass类需要注入一个TestInterface属性

代码如下:

@Component
@Slf4j
public class SomeClass {

    @Autowired
    //这种方式会报错,因为存在两个TestInterface类型的bean
    private TestInterface testInterface;
    
	//不会报错,因为此时相当于
	/*
	@Autowired
	@Qualifier("testClass1")
	*/
	@Autowired
	private TestInterface testClass1;

    public TestInterface getTestClass() {
        return testClass1;
    }
}

可以在某一个组件上加上@Primary,强制使用该类型,比如

@Component
@Primary
public class TestClass2 implements TestInterface {
    private String s="testClass2";

    public String getS() {
        return s;
    }
}

那么

@Autowired
	private TestInterface testClass1;

testClass1此时的类型是TestClass2

@Autowired放的位置

1.放在属性前,比如controller层调用service层,加在属性前不会调用set方法

@RestController
@RequestMapping("/student/card")
public class CardController {
    @Autowired
    CardService cardService;
}

2.放在set方法前,会通过调用set方法给属性赋值

@RestController
@RequestMapping("/student/card")
public class CardController {
    
    CardService cardService;
    
    @Autowired
    public void setCardService(CardService cardService) {
        this.cardService = cardService;
    }
}

3.写在set方法的参数列表中:只能是@Bean的形式,(可以不写,会默认@Autowired),并且默认通过名字注入,相当于

public SomeClass someClass(@Autowired @Qualifier("card") Card card)
	@Bean
    public SomeClass someClass(@Autowired Card card){
        SomeClass someClass=new SomeClass();
        someClass.setCard(card);
        return someClass;
    }
    
    @Bean
    public Card card(){
        Card card=new Card();
        card.setStudentId("01");
        return card;
    }

根据名字注入

同时使用@Autowired@Qualifier("beanName")

	@Autowired
    @Qualifier("beanName")
    private MybatisCardMapper mapper;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文