Spring DI(依賴注入)
阿新 • • 發佈:2019-01-24
最近在學習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(引數型別)來區分具體對應哪一個引數。