欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring的ioc容器

程序员文章站 2022-05-23 10:33:41
...

我的理解之什么是spring ico容器

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

很多公司面试的时候都问有没有用过spring,我当然回答用过。但是你让我说它的原理,我还真的搞不明白,因为都是整合成了框架后再用的,甚至更加成熟的框架,是在spring的基础上再一次重构,抽象,所以就更加搞不明白这些到底是什么了。

当然,公司追去的是效益,所以就整理出一套工业化的东西,让来的新人可以直接上手干活,写来写去都是curd。时间一长,完全忘记了底层的代码是怎么写的,甚至很多基础的代码的都不会了,比如让我现在写一个二叉树,我就已经写不出来了。

扯远了,那么,spring到底是个什么东西了?我在网上查了很多资料(虽然网上的资料全部雷同),都说spring的核定是ioc和aop,其中ioc是控制反转,aop是面向切面。
那么问题来了,控制反转是什么?


提示:以下是本篇文章正文内容,下面案例可供参考

一、IOC是什么?

是一种编程思维,为了降低各个模块之间的耦合度而存在的。那么,什么是解耦?

二、实例代码

1. 不使用spring来管理bean的情况下

代码如下(示例):

public class PersonServiceBean {
    // 因为需要使用personDao中的save方法,所以必须要new一个personDaoD 的实例
     private PersonDao personDao = new PersonDaoBean();
      public void save(Person person){
            personDao.save(person);
     }
}

从上面的代码可以看出,因为需要使用personDao中的save方法,所以必须要new一个personDaoD 的实例,这种写法,在设计模式中被称为“组合”,组合是一种耦合度比较高的关系;组合的类与被组合的类具有相同的生命周期;

那么如果要降低耦合度,可以怎么改呢?

2. 使用聚合的方式来解耦

代码如下(示例):

public class PersonServiceBean {
     private PersonDao personDao ;
    //通过构造器参数,让容器把创建好的依赖对象注入进PersonServiceBean,当然也可以使用setter方法进行注入。
     public PersonServiceBean(PersonDao personDao){
         this.personDao=personDao;
     } 
      public void save(Person person){
            personDao.save(person);
     }
}

上面这种办法,就是通过PersonServiceBean的构造器传参数,在设计模式中被称为“聚合”,聚合比组合的耦合关系要低,并且,很多情况下,都推荐使用聚合,而不是组合。

另外,我们在项目中,常见的写法:

public class PersonServiceBean {
    @resource 
    private PersonDao personDao ;
   
    public void save(Person person){
         personDao.save(person);
    }
}

可以看出,通过注解的方式,让代码看起来更加清爽了;
说多一句,现在很多项目,都已经不使用 @Autowired 了,因为@Autowired是spring的注解,而 @resource是jdk8的注解。


总结

这只是spring ioc的一个简洁,下一篇文章,我会详细的写spring是如何通过编程式和注解式去管理bean的。

相关标签: java spring

上一篇: 进入状态

下一篇: 风险,风险