社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
Ioc- Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
谁控制谁,控制什么:
为何是反转,哪些方面反转了:
图一:传统应用程序示意图
当有了Ioc/DI的容器后,在客户端类中就不再主动去创建这些对象了。
图二:有Ioc/DI容器后程序结构示意图
DI- Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并未系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关系具体的资源来自何处,由谁实现。
他们是同一个概念的不同角度描述,由于控制反转概念比较含糊,所以在2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对于Ioc而言,“依赖注入”明确描述了“被注入对象依赖Ioc容器配置依赖对象”。
在Spring IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化。只有在容器实例化后,才可以从IOC容器里获取Bean实例并使用。
Spring提供了两种类型的IOC容器实现
ApplicationContext的主要实现类
ConfigurableApplicationContext:扩展于ApplicationContext,新增加两个主要方法:refresh()和close()方法,让ApplicationContext具有启动、刷新和关闭上下文的能力。
ApplicationContext在初始化上下文时就实例化所有单例的Bean
配置形式:基于XML文件的方式;基于注解的方式
Bean的配置方式:
Ioc容器:BeanFactory;ApplicationContext
依赖注入的方式:
在Spring IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化。只有在容器实例化之后,才可以从IOC容器里获取Bean实例并使用
Spring提供了两种类型的IOC容器实现。
在没有Spring的时候需要先获取A对象,然后获取B对象,再将A放进B中
有Spring之后,只需要直接获取B对象就可以了,Spring会自动将A对象放入B中
全类名的方式如下:
class节点对应的值是想要反射的类的全路径:包名+类名
如果Class对应的类中没有无参构造器,就会报错,错误如下
获取Bean方式一:就是通过xml中的id来获取对应的bean。
获取Bean方式二:就是通过类型返回IOC容器中的bean,但要求IOC容器中必须只能有一个该类型的Bean。
ApplicationContext在初始化上下文的时候就实例化所有单例的bean
setter()
setter()
注入Bean的属性值或依赖的对象<property>
元素,使用那么属性指定Bean的属性名称,value属性或<value>
子节点指定属性值下面是通过setter()
注入Bean的属性值
<constructor-arg>
元素里声明属性,<constructor-arg>
中没有name属性xml文件
上面的程序输出的结果为:
但是如果类中重载了很多构造器那怎么办呢?
使用构造器注入属性值可以指定参数的位置和参数的类型!用以区分重载的构造器!!!通过type来指定
从上面可以看出,如果不写type。那么会自动匹配类中写在前面的构造器。
<value>
子节点进行注入方式一:直接使用property的ref
方式二:使用内部bean,在property中写一个内部bean
为级联属性赋值。
当为级联属性赋值的时候注意一定要先初始化级联的对象。
注意cars类型是List类型
使用map结点及mao的entry子节点配置Map类型的成员变量
首先要引入p的名称空间,在beans中加入下方框住的这句话:
xmlns:p="http://www.springframework.org/schema/p"
首先需要引入util的命名空间,主要包含以下三句话
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.1.xsd
">
一:Spring获取bean的步骤:
二:Bean的注入方式
<property name="属性名" value="属性值” />
<contructor-arg value="属性值">
<property name="car" ref ="car1" />
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!