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 就去注入,没找到就抛出异常。

发布了102 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/leinminna/article/details/105155700