注入

注入方式:

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

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) 无法对注入的属性进行安检

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

posted @ 2021-04-06 09:16  KLAPT  阅读(174)  评论(0编辑  收藏  举报