当前位置 : 主页 > 编程语言 > c++ >

Spring的注入方式

来源:互联网 收集:自由互联 发布时间:2021-06-30
Spring的四种注入方式 工作中,无论是被面试还是面试别人,大多都会问到一些重复的内容,所以,自己要先懂的其中的道理,然后才能审查他人,所以,今天我就把Spring的注入方式集中聊一聊.什
Spring的四种注入方式
工作中,无论是被面试还是面试别人,大多都会问到一些重复的内容,所以,自己要先懂的其中的道理,然后才能审查他人,所以,今天我就把Spring的注入方式集中聊一聊.

什么是IOC"依赖注入"?
在java中,程序开发过程中,在某个类中需要依赖其他类的方法,需要new一个依赖类后再调用类实例的方法,但是会造成程序中存在很多类实例,不好管理.
spring就将这个工作通过程序完成,开发者不用自己去new类实例,而是由spring帮我们new指定的实例,然后注入到需要该对象的类中.
依赖注入的另一种说法就是"控制反转".

spring中有多种依赖注入的形式:1.set注入;2.构造器注入;3.静态工厂注入;4.实例工厂注入

一.set注入
有一个Action类,类中需要实例化一个service对象,那就定义一个私有的成员,然后提供service的set方法(也就是ioc的入口)
public class Action {  
        //注入对象Service  
    private Service service;  
        //被注入对象的set方法(IOC)  
        public void setService(Service service) {  
        this.service = service;  
    }  
  
        public void ok(){  
        service.ok();  
    }  
}


   
    
   
        
    
        
    
    
   

  

二.构造器注入
构造函数的注入是指带着参数的构造器,eg:创建了两个成员变量,service和user,但是并没有设置对象的set方法.而是使用Action的带有两个参数的构造函数的方式注入.
public class Action {  
    //注入对象service和user  
    private Service service;  
    private User user;  

    //带有两个参数的有参构造器  
    public Action(Service service,User user){  
        this.service = service;  
        this.user = user;  
        System.out.println("构造方法调用service和user");  
    }  
          
        public void ok(){  
        user.setName("闫鑫");  
        service.save(user);  
    }  
}


   
    
   
        
    
        
    
        
    
    
   
        
   
         
   
解决构造方法中的参数不确定性的问题,使用index来强制规定参数类型
    
   
        
    
        
    
    
          

三.静态工厂注入
先定义一个工厂类,不通过类.静态方法去获取对象.而是通过spring注入的形式获取.

public class DaoFactory {  
    //静态工厂  
    public static final FactoryDao getStaticFactoryDaoImpl(){  
        return new StaticFacotryDaoImpl();  
    }  
}

然后创建Action

public class Action {  
        //注入对象  
    private FactoryDao staticFactoryDao;  
      
    public void staticFactoryOk(){  
        staticFactoryDao.saveFactory();  
    }  
    //注入对象的set方法  
    public void setStaticFactoryDao(FactoryDao staticFactoryDao) {  
        this.staticFactoryDao = staticFactoryDao;  
    }  
}  

在配置文件中,
 
  指向的class并不是FactoryDao的实现类,而是指向静态工厂DaoFactory,并且配置 factory-method="getStaticFactoryDaoImpl"指定调用哪个工厂方法


    
    
   
    
    
    
    
    
    
  

四.实例工厂注入
获取对象实例的方法不是静态的
public class DaoFactory {  
    //实例工厂  
    public FactoryDao getFactoryDaoImpl(){  
        return new FactoryDaoImpl();  
    }  
}

public class Action {  
    //注入对象  
    private FactoryDao factoryDao;  
      
    public void factoryOk(){  
        factoryDao.saveFactory();  
    }  
  
    public void setFactoryDao(FactoryDao factoryDao) {  
        this.factoryDao = factoryDao;  
    }  
}


    
    
   
    
    
    
      
    
    
    
    
    
  

总结:
IOC注入,尽情的使用set注入即可,偶尔能用到构造器注入.
spring创建的对象都是单例的,如果需要创建多例对象,可以在
  
   标签后面加一个属性. 
  
 
网友评论