spring三种依赖注入方式解析
1 前言
Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入。
2 构造注入
2.1 使用注入bean
public class UserService implements IUserService {
private IUserDao userDao;
// 构造注入
public UserService(IUserDao userDao) {
this.userDao = userDao;
}
// 注入后才能够使用
public void loginUser() {
userDao.loginUser();
}
}
2.2 对应配置
<bean id="userService" class="com.lyu.spring.service.impl.UserService">
// 构造属性注入bean
<constructor-arg ref="userDaoJdbc"></constructor-arg>
</bean>
<bean id="userDaoJdbc" class="com.lyu.spring.dao.impl.UserDaoJdbc"></bean>
3 setter 注入
3.1 使用注入bean
public class UserService implements IUserService {
private IUserDao userDao;
// set注入,set+配置中name属性,首字母大写
public setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
// 需加入空构造方法
public UserService( ) {
}
public void loginUser() {
userDao.loginUser();
}
}
3.2 对应配置
<bean id="userService" class="com.lyu.spring.service.impl.UserService">
// name属性注入bean,通过反射实现注入
<property name="userDao" ref="userDaoMyBatis"></property>
</bean>
<bean id="userDaoJdbc" class="com.lyu.spring.dao.impl.UserDaoJdbc"></bean>
4 注解注入
注解注入基于上面的两张注入外加类型匹配注入;即有constructor、byType、byName三个可选注入属性。
@Component:注册所有bean
@Repository:注册dao层的bean
@Controller:注册控制层的bean
@Service:注册服务层的bean
@Resource:java的注解,默认以byName的方式去匹配与属性名相同的bean的id,如果没有找到就会以byType的方式查找,如果byType查找到多个的话,使用@Qualifier注解(spring注解)指定某个具体名称的bean。
@Autowired:先以 ByType 的方式去匹配,如果匹配到了多个再以 ByName 的方式去匹配,找到了对应的 bean 就去注入,没找到就抛出异常。
还没有评论,来说两句吧...