有4種依賴注入方式
:
- Set方法注入:注入是最簡單、最常用的注入方式,支持註解+xml。
- 構造器注入:是指帶有參數的構造函數注入,支持註解+xml。
- 靜態工廠的方法注入:通過調用靜態工廠的方法來獲取自己需要的對象,只支持xml。
- 實例工廠的方法注入:獲取對象實例的方法不是靜態的,所以你需要首先new工廠類,再調用普通的實例方法,只支持xml。
有2 種實現方式
:
- 註解(如@Autowired,@Resource,@Required)
- 配置文件(如xml)
代碼演示:
1.set-註解方式
public class UserService {
//註解注入(autowire註解默認使用類型注入)
@Autowired //【看這裏】
private UserDao userDao;
public void login() {
userDao.login();
}
}
2.set-xml
<bean name="userService" class="com.obob.service.UserService">
<property name="userDao" ref="userDao" /><!--這裏是property-->
</bean>
<bean name="userDao" class="com.obob.dao.UserDao"></bean>
3.構造-註解方式
public class UserService {
private UserDao userDao;
//註解到構造方法處
@Autowired //【看這裏】
public UserService(UserDao userDao) {
this.userDao = userDao;
}
public void login() {
userDao.login();
}
}
4.構造-xml方式
<bean name="userService" class="com.obob.service.UserService">
<constructor-arg index="0" ref="userDao"></constructor-arg> <!--這裏是constructor-arg-->
</bean>
<bean name="userDao" class="com.obob.dao.UserDao"></bean>
5.靜態工廠-xml
<bean name="userService" class="com.obob.service.UserService">
<property name="staticUserDao" ref="staticUserDao" /><!--property屬性-->
</bean>
<!--UserDao staticUserDao=Factory.initUserDao() -->
<bean name="staticUserDao" class="com.obob.Factory" factory-method="initUserDao"></bean>
6.實例工廠-xml
<bean name="userService" class="com.obob.service.UserService">
<property name="staticUserDao" ref="staticUserDao" />
</bean>
<!--UserDao staticUserDao=factory.initUserDao() -->
<bean name="staticUserDao" factory-bean="factory" factory-method="initUserDao"></bean>
<!--Factory factory = new Factory() -->
<bean name="factory" class="com.obob.Factory"></bean>
7.瞭解@bean的方式
@Configuration
public class AppConfig {
// 使用@Bean 註解表明myBean需要交給Spring進行管理
// 未指定bean 的名稱,默認採用的是 "方法名" + "首字母小寫"的配置方式
@Bean
public MyBean myBean(){
return new MyBean();
}
}