spring三种依赖注入方式解析

川长思鸟来 2023-05-28 06:45 39阅读 0赞

1 前言

Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入。

2 构造注入

2.1 使用注入bean

  1. public class UserService implements IUserService {
  2. private IUserDao userDao;
  3. // 构造注入
  4. public UserService(IUserDao userDao) {
  5. this.userDao = userDao;
  6. }
  7. // 注入后才能够使用
  8. public void loginUser() {
  9. userDao.loginUser();
  10. }
  11. }

2.2 对应配置

  1. <bean id="userService" class="com.lyu.spring.service.impl.UserService">
  2. // 构造属性注入bean
  3. <constructor-arg ref="userDaoJdbc"></constructor-arg>
  4. </bean>
  5. <bean id="userDaoJdbc" class="com.lyu.spring.dao.impl.UserDaoJdbc"></bean>

3 setter 注入

3.1 使用注入bean

  1. public class UserService implements IUserService {
  2. private IUserDao userDao;
  3. // set注入,set+配置中name属性,首字母大写
  4. public setUserDao(IUserDao userDao) {
  5. this.userDao = userDao;
  6. }
  7. // 需加入空构造方法
  8. public UserService( ) {
  9. }
  10. public void loginUser() {
  11. userDao.loginUser();
  12. }
  13. }

3.2 对应配置

  1. <bean id="userService" class="com.lyu.spring.service.impl.UserService">
  2. // name属性注入bean,通过反射实现注入
  3. <property name="userDao" ref="userDaoMyBatis"></property>
  4. </bean>
  5. <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 就去注入,没找到就抛出异常。

发表评论

表情:
评论列表 (有 0 条评论,39人围观)

还没有评论,来说两句吧...

相关阅读

    相关 spring依赖注入方式

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理。 spring提出了依赖