(一)spring 的依赖注入,您了解多少?

       之前整理过一篇文章:依赖查找和依赖注入的区别,这篇文章讲到依赖查找和依赖注入是IOC的实现手段。我们实际工作中用到比较多的是依赖注入,具体依赖注入的模式和类型你有了解多少?网上基本说有三种方式:构造器注入、setter注入、接口注入,或者再加上一种注解注入。本文详细介绍下注入的模式和类型。

 依赖注入的模式,依赖注入模式一般分为两类:手动注入和自动注入。

 手动模式即配置或者编程的方式,提前安排注入规则,包括xml资源配置元信息、java注解配置元信息和api配置信息,xml资源配置元信息,是比较常见的配置方式,现在springboot的流行,这张方式慢慢少了很多。废话不多,直接上代码比较实际:先声明一个user类,作为被注入的bean.

/**
*
* 用户类
**/
public class User{

    private Long id;

    private String name;

   
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
   
}

再声明一个UserHodler,作为注入的bean。

public class UserHolder {

    private User user;

    public UserHolder() {
    }

    public UserHolder(User user) {
        this.user = user;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }  
}

接下来看下通过xml的手动方式将User注入到UserHodler对象中,代码如下:




    

    
        
    

现在就手动把User这个Bean注入到UserHodler的中来,但是这样有个问题,如果说有多个bean需要注入,我们就需要写多个这样的代码,会显得代码比较多。自动注入模式就很好的解决了这个问题,自动注入模式的关键字为:autowire。它提供中按照类型、名称、构造器和默认模式注入bean。上面注入注入代码我们可以修改为下面的方式:




    

    
    

是不是显得代码简单了很多,是不是也很符合我们java8的函数式编程的宗旨(尽量少的代码干更多的事)。但是这样会存在一个问题,不知道你有没有想到,假如随着业务的发展,把UserHodler代码重构掉了,代码如下:

public class UserHolder {

    private User myUser;

    public UserHolder() {
    }

    public UserHolder(User myUser) {
        this.myUser = myUser;
    }

    public User getMyUser() {
        return myUser;
    }

    public void setMyUser(User myUser) {
        this.myUser = myUser;
    }  
}

user->myUser,这样再按照自动注入方式就会注入不到bean,报空指针错误。所以在使用的过程中,我们要根据实际情况选择合理的注入模式。

在spring框架中,自动注入方式模式是关闭状态,即他们现在不推荐这种方式。我们在使用时候还是尽量少用,只了解下或者写demo的时候可以用用。

后面几篇文章介绍依赖注入类型:(二)spring 的依赖注入,您了解多少?

你可能感兴趣的:(学习,java,IOC,spring,java,后端)