一、Ioc-inversion of controller,控制反转。它是一种将你所设计的对象交由容器控制管理,以替换原有的在对象内部直接new。
1)Ioc容器管理对象:Ioc是有专门的容器负责管理创建对象。
2)容器帮助我创建管理对象并查找依赖子对象,在我们需要对象时候,只需要做简单的配置,就可以直接使用。替换了原来的:需要使用对象时,主动去获取依赖,生成实例。
在此过程中,Ioc容器帮助用户实现了创建用户类,生成并且注入依赖对象,并管理这些对象的生命周期。
概念:
Ioc实现了由传统程序需要我们在类中主动创建对象并引入依赖,导致类间耦合,到Ioc类创建、查找并注入依赖的容器管理,用户不在需要关注这些依赖而直接引用。
它实现了由应用程序主动获取资源到容器实现已经创建好资源,应用程序直接使用的过程。即inversion反转。
DI:dependancy injection,依赖注入,它是组件之间的依赖关系由容器在运行期间,动态的将依赖关系注入到组件中。提高组件重用率,搭建了灵活可复用的平台,只需要简单的配置,就可以实现业务逻辑,无需关注资源的由来和实现。DI是Ioc的另一种角度上相对应概念,明确描述了被注入对象依赖IOC容器配置对象。
Ioc是有依赖注入个哦功能呢的容器,负责实例化、定位查找、配置应用的对象实例和创建对象间的依赖。程序无需直接new对象,通过Ioc完成。
Spring Ioc:在spring中由接口BeanFactory实现。
spring配置文件:Spring IoC容器通过读取配置文件中的配置元数据,通过元数据对应用中的各个对象进行实例化及装配。一般使用基于xml配置文件进行配置元数据,而且Spring与配置文件完全解耦的,可以使用其他任何可能的方式进行配置元数据,比如注解、基于java文件的、基于属性文件的配置都可以。
Bean:
bean:豆子,由Ioc管理的在应用中实用的对象实例。它是完全由spring容器初始化、装配和管理的对象,与java pojo类相似。
Ioc:在spring中的实现是org.springframework.beans下的BeanFactory接口实现基本功能,org.springframework.context下ApplicationContext接口扩展改BeanFactory接口,并且提供了Spring aop、国际化、时间传播以及提供不同层次的context实现(WebApplicationContexst)。ApplicationContext完全继承BeanFactory。
1.XmlBeanFactory:BeanFactory的实现,从classpath或文件中读取资源:
BeanFactory bf = new XmlBeanFactory(new FileSystemResource(new File("classpath:app.xml")));
2.ClassPathXmlApplicationContext:与XmlBeanFactory,从classpath获取配置文件。
ApplicationContext接口:
• Object getBean(String name) 根据名称返回一个Bean,客户端需要自己进行类型转换;
• T getBean(String name, Class<T> requiredType) 根据名称和指定的类型返回一个Bean,客户端无需自己进行类型转换,如果类型转换失败,容器抛出异常;
• T getBean(Class<T> requiredType) 根据指定的类型返回一个Bean,客户端无需自己进行类型转换,如果没有或有多于一个Bean存在容器将抛出异常;
• Map<String, T> getBeansOfType(Class<T> type) 根据指定的类型返回一个键值为名字和值为Bean对象的 Map,如果没有Bean对象存在则返回空的Map。
-----------------------------------------------------------------------------------------------------------
二、
1.xml配置文件元数据。
2.Ioc容器解析:IoC容器的Bean Reader读取并解析配置文件,生成BeanDefinition配置元数据对象,IoC容器根据BeanDefinition进行实例化、配置及组装Bean。
Xml配置结构:
<beans>
<bean id='' name='' alias='' class=''></bean>
<bean>...</bean>
</beans>
1、<bean>标签主要用来进行Bean定义;
2、alias用于定义Bean别名;
Bean配置:
●全限定类名(FQN):具体Bean的实现类;
●Bean行为:这些定义作用域(单例、原型创建)、是否惰性初始化及生命周期等;
●Bean创建方式:说明是通过构造器还是工厂方法创建Bean;
●Bean之间关系:即对其他bean的引用,也就是依赖关系定义,这些引用bean也可以称之为同事bean 或依赖bean,也就是依赖注入。
Bean定义只有“全限定类名”在当使用构造器或静态工厂方法进行实例化bean时是必须的,其他都是可选的定义。
每个Bean可以有一个或多个id(或称之为标识符或名字),在这里我们把第一个id称为“标识符”,其余id叫做“别名”;这些id在IoC容器中必须唯一。Bean命名约定:Bean的命名遵循XML命名规范,但最好符合Java命名规范,由“字母、数字、下划线组成“,而且应该养成一个良好的命名习惯, 比如采用“驼峰式”,即第一个单词首字母开始,从第二个单词开始首字母大写开始。
Bean创建:
1.构造器创建(clas类中必须有空构造器)
2.静态工厂:指定factory-method实例化方法参数。