spring的ioc容器

我的理解之什么是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的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值