• Spring基础:注解进行自动注入


    我们可以看到IDEA的Spring板块中也显示了我们刚刚通过直接在类上添加@Component声明的Bean。

    @Component同样效果的还有@Controller@Service@Repository,但是现在暂时不提,讲到SpringMVC时再来探讨。

    现在我们就有两种方式注册一个Bean了,那么如何实现像之前一样的自动注入呢,比如我们将Card也注册为Bean,我们希望Spring自动将其注入到Student的属性中:

    1. @Component
    2. public class Student {
    3. String name;
    4. int sid;
    5. Card card;
    6. }

    因此,我们可以将此类型,也通过这种方式注册为一个Bean:

    1. @Component
    2. @Scope("prototype")
    3. public class Card {
    4. }

    现在,我们在需要注入的位置,添加一个@Resource注解来实现自动装配:

    1. @Component
    2. public class Student {
    3. String name;
    4. int sid;
    5. @Resource
    6. Card card;
    7. }

    这样的好处是,我们完全不需要创建任何的set方法,只需要添加这样的一个注解就可以了,Spring会跟之前配置文件的自动注入一样,在整个容器中进行查找,并将对应的Bean实例对象注入到此属性中,当然,如果还是需要通过set方法来注入,可以将注解添加到方法上:

    1. @Component
    2. public class Student {
    3. String name;
    4. int sid;
    5. Card card;
    6. @Resource
    7. public void setCard(Card card) {
    8. System.out.println("通过方法");
    9. this.card = card;
    10. }
    11. }

    除了使用@Resource以外,我们还可以使用@Autowired(IDEA不推荐将其使用在字段上,会出现黄标,但是可以放在方法或是构造方法上),它们的效果是一样的,但是它们存在区别,虽然它们都是自动装配:

    • @Resource默认ByName如果找不到则ByType,可以添加到set方法、字段上。
    • @Autowired默认是byType,可以添加在构造方法、set方法、字段、方法参数上。

    并且@Autowired可以配合@Qualifier使用,来指定一个名称的Bean进行注入:

    1. @Autowired
    2. @Qualifier("sxc")
    3. public void setCard(Card card) {
    4. System.out.println("通过方法");
    5. this.card = card;
    6. }

    如果Bean是在配置文件中进行定义的,我们还可以在方法的参数中使用@Autowired来进行自动注入:

    1. @ComponentScan("com.test.bean")
    2. @Configuration
    3. public class MainConfiguration {
    4. @Bean
    5. public Student student(@Autowired Card card){
    6. Student student = new Student();
    7. student.setCard(card);
    8. return student;
    9. }
    10. }

    我们还可以通过@PostConstruct注解来添加构造后执行的方法,它等价于之前讲解的init-method

    1. @PostConstruct
    2. public void init(){
    3. System.out.println("我是初始化方法!1");
    4. }

    注意它们的顺序:Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct

    同样的,如果需要销毁方法,也可以使用@PreDestroy注解,这里就不做演示了。

    这样,两种通过注解进行Bean声明的方式就讲解完毕了,那么什么时候该用什么方式去声明呢?

    • 如果要注册为Bean的类是由其他框架提供,我们无法修改其源代码,那么我们就使用第一种方式进行配置。
    • 如果要注册为Bean的类是我们自己编写的,我们就可以直接在类上添加注解,并在配置中添加扫描。

  • 相关阅读:
    第13章 软件测评相关标准 13.1-标准化的概述 13.2-软件质量模型与评价标准
    阿里二面,前端开发在web3.0中该如何应用,答完面试官对我笑了笑
    软件测试女生可以学习么?现在还能入行么?
    Springboot个人博客毕业设计-附源码191613
    设计模式-责任链模式
    [Kafka]基础概念篇
    Mysql JDBC 编程
    C++调用lua脚本,包括全局函数绑定、类绑定,十分钟快速掌握
    SpringCloudAlibaba的nacos控制台不断输出日志
    基于Linux下的多人聊天室
  • 原文地址:https://blog.csdn.net/Leon_Jinhai_Sun/article/details/126205639