IOC/DI详解

一、IOC详解

IOC控制反转,就是将对象的控制权交给Spring的IOC容器,由IOC容器创建及管理对象。IOC容器创建的对象称为bean对象。

使用步骤

基于这些注解,我们就可以使用 @Service 注解声明Service层的bean。 使用 @Repository 注解声明Dao层的bean。 代码实现如下:  

1.Service层

代码如下(示例):

@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptDao deptDao= new DeptDaoImpl();

    @Override
    public List<Dept> queryDeptList() {
       //代码逻辑
        
        return deptList;
    }
}

2.Dao层

代码如下(示例):

@Repository
public class DeptDaoImpl implements DeptDao {
    @Override
    public List<String> queryDeptList(){
       //代码
    }
}

注意1:声明bean的时候,可以通过注解的value属性指定bean的名字,如果没有指定,默认为类名首字母小写。

注意2:使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller。

二、DI详解

如果在IOC容器中,存在多个相同类型的bean对象,会出现什么情况呢?

控制台报错!!!需要一个bean,但是找到两个!!!

那我们如何解决呢???

Spring提供了以下几种解决方案:

  • @Primary

  • @Qualifier

  • @Resource

方案一:使用@Primary注解

当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现。

@Primary
@Service
public class DeptServiceImpl implements DeptService {
}

方案二:使用@Qualifier注解

指定当前要注入的bean对象。 在@Qualifier的value属性中,指定注入的bean的名称。 @Qualifier注解不能单独使用,必须配合@Autowired使用

@RestController
public class DeptController {

    @Qualifier("deptServiceImpl")
    @Autowired
    private DeptService deptService;

方案三:使用@Resource注解

是按照bean的名称进行注入。通过name属性指定要注入的bean的名称。

@RestController
public class DeptController {
	
    @Resource(name = "deptServiceImpl")
    private DeptService deptService;


三、面试题 

@Autowird 与 @Resource的区别

  • @Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解

  • @Autowired 默认是按照类型注入,而@Resource是按照名称注入

新手上路不喜勿喷,各路大佬给点建议【抱拳】 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值