IOC

概述

IOC(控制反转) 是一种很设计思想,目的是为了指导我们设计出松耦合的程序

  • 控制 : 指的是对象的控制权,在java中可以理解为对象的控制权限(对象的创建,销毁等)
  • 反转 : 指的是对象的控制权由原来在程序员手中交给spring容器去管理
  • 总结来说 : 就是对象的控制权交给spring容器,由spring容器来管理对象的生命周期和对象之间的关系,程序员需要获取对象时去spring容器中获取
  • 主要功能是 : 降低了对象之间耦合度高,实现对象之间的解耦
  • IOC底层用的原理是 : 反射

我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用java的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

BeanFactory和ApplicationContext
BeanFactory
  • BeanFactory是IOC的心脏,
  • 是 IOC 容器的核心接口,它定义了IOC的基本功能。
  • 加载bean的配置,管理bean的生命周期,维护各个bean之间的关系
ApplicationContext
  • ApplicationContext是BeanFactory的子接口,可以比喻为spring的躯体
  • ApplicationContext在Beanfactory的基础上填加了新的功能:
  • 支持aop和web应用
  • MessageSource,提高国家化的消息访问
  • 通过配置来实现BeanFactory中很多编码才能实现的功能
  • ApplicationContext常用的API
  • ClassPathXmlApplicationContext : 从classpath目录中读取文件
  • FileSystemXmlApplicationContext : 从文件系统或者url中读取文件
  • AnnotationConfigApplicationContext : 当我们使用注解配置容器时,需要使用此类来创建spring容器,他来读取注解
  • 两者的区别:

面向群体

  • BeanFactory :是面向spring框架的基础设施,也就是供spring内部使用的
  • ApplicationContext:是面向spring框架的使用者

创建bean的时间

  • BeanFactory常见容器时并没有加载bean,只有使用者调用了getBean()方法时才会创建bean
  • ApplicationContext是加载容器启动时就会一次性加载所有的bean对象(优点就是让容器启动时就可以看出bean中的配置是否有报错,缺点技术加载的bean过多的话,会占用内存空间,减低效率)
生命周期
<!--
        定义配置信息
            id:唯一标志(获取的时候,调用容器的getBean("id"))
            class:实现类的全限定类名
            scope:对象作用域
                singleton : 单例(默认)
                prototype :多例
                request
                session
                global-session
         原理:
            通过反射调用,无参构造方法创建对象
    -->
    <bean id="userDao" class="cn.itcast.dao.impl.UserDaoImpl" scope="prototype" </bean>

singleton 单例模式 : 由容器控制生命周期,容器创建则对象创建,容器销毁则对象销毁
prototype 多例模式 : 调用getBean()方法时创建对象.spring无法销毁,由javacg(垃圾处理机制)负责销毁

DI 依赖注入

概述:
是spring框架核心IOC的具体实现,通过控制反转将对象的创建交给了容器,但是代码中不可能出现没有依赖的情况

IOC具有两个功能 : 依赖注入和依赖查找
本质 : 为对象中的私有属性赋值
形式:

  • set方式
    -有参构造方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon20120331

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值