Spring IOC(控制反转)与DI(依赖注入)

定义

IOC(Inversion of Control),即控制反转:对象的创建控制权不再由程序来执行,而是交由给Spring容器处理。简单的说程序不需要进行new操作,对象直接由Spring容器自动创建。
DI(Dependency Injection),即依赖注入:Spring容器为程序运行时提供所需要的资源(对象)。
Bean对象:IOC容器中进行管理、创建的对象。

在这里插入图片描述

主要由@Component、@Service、@Controller、@Repository、@Autowired、@Qualifier、@Resource注解体现。

@Component是通用注解,其他三个注解是这个注解的衍生注解,并且具有了特定的功能。
@Controller层是spring-mvc的注解,用于标注控制层组件,并查看是否处理请求转发,重定向。
@Service层是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层。
@Repository注解在持久层中,标注 DAO 类,具有将数据库操作抛出的数据访问异常自动转换(封装)为spring的持久层异常的功能。

所有在与主程序同级目录或子包中标记的注解会被ComponentScan(组件扫描器)识别并在Spring容器中创建相应的java bean。bean的名字是类名的首字母小写(Admin->admin)。

@Autowired 体现了依赖注入的思想,从容器中获取对象,不再需要通过new创建对象,就可以自动根据容器中符合条件的bean进行创建(接口实现类)。默认按类型进行注入,
@Qualifier 一般配合Autowired进行使用,可以指定特定Bean类名。

@Resource是jdk提供的注解,而@Autowired、@Qualifer都是Spring提供的注解。@Resource也是通过Bean的类名来直接注入。

程序实例

Dao层:ArraysDao返回[1,2,3]集合

public interface BasicDao<E> {
    List<E> getData();
}

@Repository  //标识对象是数据存储对象,并且在容器中创建bean
public class ArraysDao implements BasicDao<Integer> {
    @Override
    public List<Integer> getData() {
        ArrayList<Integer>arrayList=new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        return  arrayList;

    }
}

Service层:通过Dao层获取数据集合

public interface BasicService {
    List<Integer> getArray();
}

@Service  //将对象标识为Service对象,并在容器中创建bean
public class ArrayService implements BasicService{
    @Autowired
    BasicDao arraysDao;
    @Override
    public List<Integer> getArray() {
        return arraysDao.getData();
    }
}

Controlloer层:


@RestController // =@ResponseBody +@Controller 标识是控制器对象
public class TestController {
    @Autowired //依赖注入,会自动注入符合BasicService接口的bean
    BasicService arrayService;

    @RequestMapping("/test")
    public List<Integer> test(){
        System.out.println(arrayService.getArray());
        return  arrayService.getArray();
    }
}

在程序运行时可以在该界面看到对应注解生成的java Bean。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值