zoukankan      html  css  js  c++  java
  • 注入

    注入方式:

    基于构造函数的依赖注入:

    public class UserServiceImpl implents UserService{
        private UserDao userDao;
        
        @Autowire
        public UserServiceImpl(UserDao userDao){
            this.userDao = userDao;
        }
    }

    基于Setter的依赖注入:

    public class UserServiceImpl implents UserService{
         private UserDao userDao;
         
         @Autowire
         public setUserDao(UserDao userDao){
             this.userDao = userDao;
         }
     }

    基于字段的依赖注入:

    public class UserServiceImpl implents UserService{
         @Autowire
         private UserDao userDao;
     }

    基于字段的依赖注入缺点:

    (1)对于有final修饰的变量不好使

         Spring的IOC对待属性的注入使用的是set形式,但是final类型的变量在调用class的构造函数的这个过程当中就得初始化完成,这个是基于字段的依赖注入做不到的地方.只能使用基于构造函数的依赖注入的方式。

    (2)掩盖单一职责的设计思想

    采用的是基于构造函数的依赖注入的方式来使用Spring的IOC的时候,当你注入的太多的时候,这个构造方法的参数就会很庞大;但是使用基于字段的依赖注入不会让你察觉,你会很沉浸在@Autowire当中。

    (3)与Spring的IOC机制紧密耦合

    当你使用基于字段的依赖注入方式的时候,确实可以省略构造方法和setter这些个模板类型的方法,但是,你把控制权全给Spring的IOC了,别的类想重新设置下你的某个注入属性,没法处理。

      (4)隐藏依赖性

    当你使用Spring的IOC的时候,被注入的类应当使用一些public类型(构造方法,和setter类型方法)的方法来向外界表达:我需要什么依赖.但是基于字段的依赖注入的方式,基本都是private形式的,private把属性都给封印到class当中了。

    (5) 无法对注入的属性进行安检

    基于字段的依赖注入方式,你在程序启动的时候无法拿到这个类,只有在真正的业务使用的时候才会拿到;想在属性注入的时候,想根据这个注入的对象操作点东西,你无法办到。

  • 相关阅读:
    Java基础
    Java 基础
    Java基础
    Java基础
    web 学习随记(1)
    jdk8-》List去重
    JVM-调优方案
    JUC_02 AQS工作原理
    Synchronized-可重入锁原理
    JUC_01 线程阻塞、唤醒三种方式
  • 原文地址:https://www.cnblogs.com/KL2016/p/14620267.html
Copyright © 2011-2022 走看看