Spring框架的核心是基于控制反转(IOC)的原理。IOC是一直将组件依赖项的创建和管理外部化的技术。传统项目A类依赖B类的一个实例执行某种操作,在A类中通过B b = new B();这种方式或者从某个工厂中获取B的实例。而使用IOC方法,B类的实例在运行时由某个外部进程提供给A类,这种运行时注入依赖的行为将IOC重命名为依赖注入(DI).
spring的DI实现基于两个核心概念:javaBean和接口。
springIOC分为 依赖查找和依赖注入
依赖查找:
依赖拉取和上下文依赖查找 这里不做多的说明
依赖注入:构造方法注入和setter注入
构造方法注入:当对象的构造函数中提供依赖的时候,就会发生构造函数的依赖注入。首先对象声明一个构造函数,并将依赖项作为参数,然后在对象实例化的时候由IOC容器将依赖传递给对象。
使用构造函数注入 如果没有依赖项就不能创建对象
setter注入:在setter依赖注入中,IOC容器通过JavaBean样式的setter方法注入对象依赖项,对象的setter方法公开了ioc容器可以管理的依赖项。
setter注入可以在没有依赖项的情况下创建对象。然后通过调用setter来提供依赖项。
spring依赖注入
spring依赖注入容器的核心时beanFactory接口,BeanFactory负责管理对象,包括依赖项和它们的生命周期。
BeanFactory :为每一个bean分配一个id或者名称,一个bean也可以没有id或名称(匿名bean),或者作为另一个bean的内部bean被实例化,每个bean至少有一个名称,可以使用bean id或者名称从BeanFactory中检索出一个bean,并建立依赖关系。
接下来实现一个用beanFactory的实例
一个人接口
一个男人实现类
BeanFactory实现
配置文件
最后打印结果
说了BeanFactory 接下来说说 它的扩展接口 ApplicationContext
ApplicationContext
ApplicationContext是beanFactory的扩展,除了DI服务,还提供事务,AOP服务,国际化服务的消息源以及应用程序事件处理
app-context.xml配置文件
这行注解等同于上面的
<context:component-scan base-package="com.jiy.pojo"/>