1. setter
定義一個userDao和一個userService,在userService中定義userDao私有屬性,並定義setter方法,然後在xml中建立兩個類的聲明及配置:
<bean id="userDao" class="....." />
<bean id="userService" class="......" />
<property name="userDao" ref="userDao" />
</bean>
2. 構造器
將setter注入bean的xml中property換成constructor-arg即可通過構造函數完成userDao注入,但耦合緊密,不推薦。
3. 註解
不需要在xml中配置bean,只要加上<context:component-scan base-package=“com.imooc.spring” /> 即可掃描整個包下的註解。
在userDaoImpl下增加@Repository註解,意爲倉庫,在IOC容器初始化時自動加載當前的類並實例化,bean id默認爲類名小寫,可設置爲自定義,需在userService上加註解@Service(“userService”),中間的字符串即爲bean id。
在userService的userDao屬性上增加@Resouce(name=“userDao”)完成注入。
4. java config
不再使用xml,而是註解+java代碼。仍在xml中加上掃描註解的配置,新建AppConfig類。
@Configuration
public class AppConfig{
@Bean(name="userDao")
public UserDao userDao(){
return new UserDaoImpl();
}
@Bean(name="userService")
public UserService userService(){
UserService userService = new UserService();
userService.setUserDao(this.userDao());
return userService;
}
}