【SpringBoot_ANNOTATIONS】自动装配 01 @Autowired & @Qualifier & @Primary

自动装配 01 @Autowired & @Qualifier & @Primary

自动装配:Spring利用依赖注入(DI),完成对IOC容器中各个组件的依赖关系赋值

  1. 常用@Autowired

    • 默认优先按照类型去容器中找对应的组件
    • 若ioc中有多个同类型的bean,再将属性名称作组件id去容器中查找(会报错
  2. 也可以使用 @Qualifier("[beanName]")来指定注入bean,这种情况下可以存在相同类型的多个bean‘

  3. 如果没有bean,会报错 自动装配默认一定要将属性赋值好,否则会报错

    可以修改这种默认设置: @Autowired(required=false)
    多数据源的时候用的多

  4. @Primary:让Spring进行自动装配的时候默认使用首选的bean,也可以继续使用@Qulifier指定需要装配的bean的名字

    优先级:@Qulifier > @Primary

@Primary测试

常用@Autowired
BookDao.java


@Repository
public class BookDao {
    private Integer lable = 1;

    public Integer getLable() {
        return lable;
    }

    public void setLable(Integer lable) {
        this.lable = lable;
    }

    @Override
    public String toString() {
        return "BookDao{" +
                "lable=" + lable +
                '}';
    }
}

BookService.java

@Service
public class BookService {

    @Autowired
    private BookDao booKDao;

    @Override
    public String toString() {
        return "BookService{" +
                "booKDao=" + booKDao +
                '}';
    }
}

BookController.java

@Controller
public class BookController {
    @Autowired
    private BookService bookService;
}

配置类
MainConfig4Autowire.java

package com.example.annotations.config;

import com.example.annotations.dao.BookDao;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;


@Configuration
@ComponentScan(value = {"com.example.annotations.service","com.example.annotations.dao","com.example.annotations.controller"})
public class MainConfig4Autowire {


    @Bean("bookDao2")
    public BookDao bookDao(){
        BookDao bookDao = new BookDao();
        bookDao.setLable(2);
        return bookDao;
    }
}

测试:

    @Test
    void autowiredTest(){
        //配置类测试
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig4Autowire.class);
        System.out.println("容器创建完毕");
        //获取bean
        System.out.println("准备获取bean");
        BookService bookService = applicationContext.getBean(BookService.class);
        System.out.println(bookService.toString());
        System.out.println("获取完毕");
        //关闭容器
        applicationContext.close();
        System.out.println("容器已关闭");
    }

运行结果:
在这里插入图片描述

配置类不加 @Primary 的时候,启动测试会报错,因为有两个BookDao的bean;配置类如果不指定注入的话,运行结果如下:

在这里插入图片描述

@Qualifier测试

配置类:

@Configuration
@ComponentScan(value = {"com.example.annotations.service","com.example.annotations.dao","com.example.annotations.controller"})
public class MainConfig4Autowire {


//    @Primary
    @Bean("bookDao2")
    public BookDao bookDao(){
        BookDao bookDao = new BookDao();
        bookDao.setLable(2);
        return bookDao;
    }
}

BookService.java


@Service
public class BookService {

    @Autowired
    @Qualifier("bookDao2")
    private BookDao booKDao;

    @Override
    public String toString() {
        return "BookService{" +
                "booKDao=" + booKDao +
                '}';
    }
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值