1. 程式人生 > >Spring DI(依賴注入)

Spring DI(依賴注入)

最近在學習spring框架,寫此部落格記錄學習過程,今天整理下Spring的依賴注入。spring的依賴注入又叫做控制反轉,即之前有程式設計師寫的注入現在轉交給Spring容器管理,spring容器通過註解的方式自動注入。當然,也可以通過配置的方式實現spring的依賴注入。注入有兩種形式:set方法注入和構造器注入。

1.沒有使用spring,自己手動設定物件間的依賴:

UserService userServiceImpl = new UserServiceImpl();
UserDAO userDAOImpl = new UserDAOImpl();
//這裡沒有使用Spring的依賴注入,此處為手動
set設定的。 userServiceImpl.setUserDAOImpl(userDAOImpl); userServiceImpl.add(user);

2.使用spring的自動掃描註解:(推薦使用)

a.  需要在ServiceImpl.java   ,  UserDAO.java  中加@Service 

b.   在beans.xml 裡面寫上自動掃描   <context:component-scan base-package="com.jyf"/>

c.   在測試類中通過context物件得到spring容器中的Bean。 

    ApplicationContext context = new ClassPathXmlApplicationContext("Spring/beans.xml");
    UserService service = (UserService) context.getBean("userServiceImpl");

3. 使用配置的方法注入:

 a.在beans.xml中配置

<bean name="userServiceImpl" class="com.jyf.service.UserServiceImpl">
    <property name="userDAOImpl" ref="userDAOImpl"></property>
</bean>
<bean name="userDAOImpl" class="com.jyf.dao.UserDAOImpl"> </bean>

b. ServiceImpl.java中還要寫上get /set 

private UserDAO userDAOImpl ;    //定義一個DAO介面
public UserDAO getUserDAOImpl() {
    return userDAOImpl;
}

public void setUserDAOImpl(UserDAO userDAOImpl) {
    this.userDAOImpl = userDAOImpl;
}
public void add(User user){
    userDAOImpl.Save(user);
}

  c.測試類與上面的2相同。這樣,通過spring容器,Service依賴的DAO就自動被注入進來了。 

4.構造器注入:

<constructor-arg ref="userDAOImpl"></constructor-arg>

若構造器有多個引數了,可以用index 或者type(引數型別)來區分具體對應哪一個引數。