详解Spring依赖注入的三种方式使用及优缺点

  前置说明:这里的代码演示都是在UserController类里面使用UserService类,然后通过启动类调用UserController类,观察在UserController中是否通过三种依赖注入的方式获取到UserService对象,UserService代码及启动类(App)代码如下:

  @Service

  public class UserService {

  public void sayHi() {

  System.out.println("do userService sayHi()");

  }

  }

  public class App {

  public static void main(String[] args) {

  //1.获取 Spring 上下文对象

  ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

  //2.获取 Bean 对象

  UserController userController = context.getBean("userController", UserController.class);

  //3.使用 Bean 对象

  userController.sayHi();

  }

  }

  一,属性注入

  1,属性注入的使用

  属性注入针对于属性,将需要注入的Bean对象(这里是UserService)加上@Autowired注解(该单词的意思为自动注入),此时就可以将该对象从Spring容器中取出(前提必须加上五大类注解,否则Spring容器中不会有这个对象)

  2,属性注入的优缺点

  优点:

  属性注入只需要在属性上面加一个@AutoWired注解,写法简便,可读性高,易维护(绝大部分实际开发中使用的都是属性注入的方式)

  缺点:

  二,Setter注入

  1,setter注入的使用

  Setter注入就是使用Java的setter方法配合注解将Bean注入到当前类中;

  Setter注入针对于setter方法,通过方法将Bean对象从Spring中获取到并进行赋值(前提必须加上五大类注解,否则Spring容器中不会有这个对象)

  2,Setter注入的优缺点

  优点:

  Setter注入满足单一设计职责原则:因为setter方法的特性就是一个setter方法只对应一个对象,不会有注入多个对象的可能性;

  缺点:

  三,构造方法注入

  1,构造方法的使用

  构造方法顾名思义针对于构造方法,在构造方法上面加上注解将Bean对象注入到当前类中(前提必须加上五大类注解,否则Spring容器中不会有这个对象)

  2,构造方法的特点(不同于其他两种注入方式)

  当类中只有一个吻构造方法时可以省略@Autowired,当有多个构造方法时不可以省略,否则会报错(因为多个构造方法时不知道默认给哪个构造方法加注解);

  3,构造方法注入的有优缺点

  优点:

  缺点:

  四,final对象能否被注入的原因

  Java规定被final修饰的属性只能在两个地方进行赋值:

  属性注入和Setter方法注入都没有在定义的时候赋值(属性注入没有进行赋值,Setter方法注入是通过setter这个普通方法进行的赋值),构造方法则是通过构造方法进行了赋值,所以前两个不能注入final修饰的类,后者可以!

  以上就是详解Spring依赖注入的三种方式使用及优缺点的详细内容,更多关于pring依赖注入方式及优缺点的资料请关注脚本之家其它相关文章!

  您可能感兴趣的文章: