Spring——@Autowired注解遇到多个类型匹配注入的方式

如果有唯一的一个类型匹配时,则会直接注入成功。

如果有多个类型匹配时,会先按照类型找到符合条件的对象,然后再用变量名称作为bean的id,从里面继续查找,如果找到仍然可以注入成功,如果没有匹配的ID则会报错。

例如:(例子中有两个持久层实现类,当在服务层即Service层使用@Autowired注解进行匹配时,只需与持久层定义bean的ID名称与变量名称相匹配!)

Spring——@Autowired注解遇到多个类型匹配注入的方式_第1张图片

spring.xml配置文件




    
    
    

IAccountDao.interface持久层接口

package com.hern.dao;

public interface IAccountDao {
    public void saveAccount();
}

IAccountDaoImpl.class持久层第一个实现类

package com.hern.dao;

import org.springframework.stereotype.Repository;

@Repository("IAccountDaoImpl")
public class IAccountDaoImpl implements IAccountDao{

    @Override
    public void saveAccount() {
        System.out.println("持久层实现");
    }
}

IAccountDaoImpl2.class持久层第二个实现类

package com.hern.dao;

import org.springframework.stereotype.Repository;

@Repository("IAccountDaoImpl2")
public class IAccountDaoImpl2 implements IAccountDao {
    @Override
    public void saveAccount() {
        System.out.println("持久层实现222");
    }
}

IAccountService.interface业务层接口

package com.hern.service;

public interface IAccountService {
    /**
     * 保存操作
     * */
    public void saveAccount();
}

IAccountServiceImpl.class类(服务层实现类)

package com.hern.service;

import com.hern.dao.IAccountDao;
import com.hern.dao.IAccountDaoImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service("IAccountServiceImpl")
public class IAccountServiceImpl implements IAccountService{

    @Autowired
    private IAccountDao IAccountDaoImpl2;

    public IAccountServiceImpl() {
        System.out.println("IAccountServiceImpl成功实例化");
    }

    @Override
    public void saveAccount() {
        IAccountDaoImpl2.saveAccount();

    }
}

Test.class测试类

package com.hern.util;

import com.hern.service.IAccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test{
    /**
     * 获取Spring的核心容器,并且根据bean的id获取对象
     * */
    @SuppressWarnings("all")
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/hern/config/application-spring.xml");
        IAccountService iAccountService = (IAccountService) applicationContext.getBean("IAccountServiceImpl");
        iAccountService.saveAccount();
    }
}

运行效果

Spring——@Autowired注解遇到多个类型匹配注入的方式_第2张图片

你可能感兴趣的:(Spring)