Spring-依赖注入(DI)

依赖注入(DI)

1.1 案例

1.1 创建Service接口和实现类

public interface DeptService {

    void save();
}
@Service
public class DeptServiceImpl implements DeptService {
    @Override
    public void save() {
        deptDao.save();
    }
}

1.2 在Service中获取dao对象

    //@Autowired 表示依赖自动注入,标注在属性上;
    //Spring见到这个注解之后,就会自动在自己的容器中根据被标注属性的类型(DeptDao)进行查找被标注属性需要的值
    @Autowired
    private DeptDao deptDao;

1.3 测试

    //获取service
    @Test
    public void test4(){
        //1.读取配置类的信息,初始化Spring容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

        //2.从容器中获取service对象
        DeptService deptService = context.getBean(DeptService.class);

        System.out.println(deptService);
    }

2. 细节

2.1 @Autowired

@Autowired注解,默认是按照类型进行属性的赋值,如果存在多个相同类型的bean,就会报错
@Autowired 表示依赖自动注入,标注在属性上;
Spring见到这个注解之后,就会自动在自己的容器中根据被标注属性的类型(DeptDao)进行查找被标注属性需要的值
1.找不到 NoSuchBeanDefinitionException
2.找到一个 自动完成注入
3.找到多个 NoUniqueBeanDefinitionException

2.2 @Qualifier

跟@Autowired联合使用,标注在要赋值的属性上,代表在按照类型匹配的基础上,再按照指定名称匹配

    @Autowired
    @Qualifier("deptDaoImpl2")//此注解必须跟@Autowired配合使用,作用就是当使用@Autowired匹配到多个时,,再使用此注解指定对象id
    private DeptDao deptDao;

2.3 @Primary

@Primary标注在实现类上,表示当一个接口有多个实现的类时,默认使用哪个作为主实现

@Repository("deptDaoImpl")
@Primary //标注在接口下实现类上,将此类的对象声明当前接口下的主要对象.注意:一个接口下只能有一个@Primary注解
public class DeptDaoImpl implements DeptDao {
    //添加一个无参函数,用于测试对象创建时间
    public DeptDaoImpl() {
        System.out.println("对象创建");
    }
    @Override
    public void save() {
        System.out.println("保存成功");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值