Spring IOC
本文引用自:https://elfgirl.top/archives/638
- spring概述及其特点
(1) 概述
1 spring是一个开源框架
2 spring是为了简化企业级开发而生,可以简单的实现只有EJB才能实现的功能
3 spring是一个IOC(DI)和AOP容器框架
(2) 两大特点
1 IOC(DI) :控制反转(依赖注入)
1) 指把原先我们代码里面需要实现对象的创建、对象的依赖关系反转(交给)给容器帮我们实现。那么我们必然会创建一个容器,同时需要一种描述来让容器知道我们需要创建那些对象以及对象与对象之间的关系。一般情况这种描述是以一种可配置文件的方式存在。
2) 更加通俗的讲就是以前都是我们自己创建对象维护对象之间的关系,现在我们让IOC容器帮我们创建对象以及维护对象之间的关系,而我们只声明的时候指定其方式就可以。当我们使用的时候,只需要指定变量接受即可(指定方式)。IOC容器会自动将创建好的对象给我们。
2 AOP : 面向切面编程
1) 面向切面编程是一种思想,是一种横切的技术。将我们系统中各个模块中相同的横切面(日志、权限)等集中到一起编程,可以在不影响功能的前提下完成任务。
2)
(3) 优点
1) 轻量级、非入侵式框架。不需要应用程序强制实现特定接口或者继承某个类。
依赖注入
2) 面向切面编程
3) 容器:spring管理我们项目中对象的声明周期
4) 框架,可以通过简单的配置实现复杂的应用
5) 一站式:可以与第三方框架快速集成。
- IOC容器体系介绍
(1) 体系图
(2) 常用的类或者接口
1 BeanFactory : Spring IOC容器的根接口,提供了获取bean的基本方法等。一般提供给Spring本身自己使用
2 ApplicationContext : BeanFactory的子接口,扩展了一些功能,提供给Spring使用者使用
3 ConfigurableApplicationContext : 扩展ApplicationContext使得IOC容器具有刷新,关闭的功能
4 ClassPathXmlApplication : 具体实现子类,从类路径下加载IOC配置文件,并创建容器
5 FileSystemXmlApplicationContext :具体实现子类,从系统路径下加载IOC配置文件,并创建容器
6 WebApplicationContext :Web项目使用的IOC容器
(3) getBean()方法介绍
1 作用: 从IOC容器内获取bean
2 重载方法:
1) Object getBean(String name) throws BeansException :根据配置bean的id获取bean
2) <T> T getBean(Class<T> requiredType) throws BeansException : 根据传入的Class类型获取bean。注意:如果容器中有多个兼容类型的bean会抛出异常
3) <T> T getBean(String name,Class<T> requiredType) Throws BeansException 根据配置bean的id,并且指定类型,获取bean。(不用强制转换)
4) Object getBean(String name,Object ... args) : 根据指定id的名称和构造器获取bean,该bean可以不配置属性赋值和构造赋值,指定使用args给对象赋值,并返回。
- bean的注入方式
(1) 属性注入
1 property标签的name属性和value属性
2 property的子标签<vaue>或者 <ref bean=”beanId ” />来指定
3 案例:
(2) 构造器注入(<constructor-arg> 标签配置)
1 使用index=”下标” 指定构造函数参数位置。缺点:函数重载问题类型兼容不能解决
2 使用type=”全类名” 指定构造函数类型 。缺点: 不能指定位置,找不到指定的构造器
3 ①②混合使用。 解决问题
(3) 工厂注入: 略
- 引用其他bean配置(引用其他bean的id)
(1) ref属性:
(2) ref标签
- 内部bean配置
(1) 内部配置bean标签
- 字面量配置
(1) 八大基本数据类型和String类型,可以直接写到value属性内
(2) String类型含有特殊字符配置方式
1 实体配置
2 <![CDATA[ 值 ]]>方式
- 集合配置
(1) 方式一:直接使用<set> <list><map> <array>的节点在内部配置,只能在内部使用
(2) 方式二:可以使用util工具配置公共的集合,都可以引用(一般使用id引用)
map集合配置:通过map entry 标签配置
- p命名空间
(1) 概述
1 在spring2.5以后推出了p命名空间,可以在bean上直接使用p命名空间配置简化了配置
(2) 使用
- 自动装配
(1) 前提:只能装配非字面量的属性
(2) 装配方式
1 通过byName装配
1) 装配规则:通过在IOC容器内匹配bean的id和类中属性名相同的bean就行自动装配
2 通过byType装配
1) 装配规则:通过在IOC容器内配置和类中属性类型相同的bean,进行自动装配。注意:不关心id是否与属性名相同
2) 问题:如果IOC容器内有两个或者两个以上兼容类型的bean,则使用byType装配,会报错!