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;
}
}