设为首页 加入收藏

TOP

Spring IOC 配置详解
2017-03-03 08:15:41 】 浏览:462
Tags:Spring IOC 配置 详解

IOC中文是控制反转,即是某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定。从而解除了某一接口对实现类的直接依赖。


主要分为构造函数注入,属性注入,接口注入


构造函数注入


属性注入


接口注入


此种方式和属性注入没有明显区别,但是却增加了一个接口,这不利于项目后期的维护,因此不建议使用!


Spring的Resource接口,使应用访问底层资源更加便捷。
主要方法:
-boolean exists() 是否存在
-boolean isOpen()
-URL getURL()
-File getFile()
-InputStream getInputStream()


这个接口下面主要的实现类有:


测试1


测试2


测试3


注:资源加载时默认采用系统编码读取资源,如果需要转码,可用EncodedResource


资源地址表达式


匹配符
? :一个字符
* :多个字符
** :多级目录


资源加载器
ResourceLoader:可以根据资源地址加载一个资源,但不支持匹配符
ResourcePatternResolver:支持匹配符
PathMatchingResourcePatternResolver:Spring的标准实现,也支持匹配符


BeanFactory是一个工厂,用于创造各种类型的对象。
BeanFactory体系结构
BeanFactory:底层接口
ListableBeanFactory:增加访问容器中Bean基本信息的方法 如bean的个数,是否包含等。
HierarchicalBeanFactory:父子容器级联接口,使子容器可以访问父容器。
ConfigurableBeanFactory:重要接口,增强了IOC的定制化,加入了类装载器、属性编辑器、容器初始化后置处理器的方法
AutowireCapableBeanFactory:加入自动装配


测试


注:以上使用了XmlBeanFactory,其为上面那些接口的最终实现类。用BeanFactory会导致Bean在容器启动时候不会主动初始化,而是等到第一次使用时候在初始化。


主要实现类有ClasspathXmlApplicationContext与FileSystemXmlApplicationContext,且ApplicationContext所有实现类都实现了ResourcePatternResolver接口,可以接受匹配符表达式加载资源文件。
并且ConfigurableApplicationContext还加入了refresh()和close(),用于刷新和关闭容器。
ApplicationContext是在容器启动时初始化所有Bean


注解配置


WebApplicationContext
WebApplicationContext是存储在ServletContext中,所有可以再任何代码中取出实用。
WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)


WebApplicationContext初始化
在Web.xml配置监听器
ContextLoaderListener


如果不支持Listener,则可以使用ContextLoaderServlet


以上配置,Spring会默认采用XmlWebApplicationContext,如果要采用注解,可以实用如下配置


Bean的作用范围
实例化Bean时所经历的一系列阶段


关键点:


可以注册多个同种接口的实现类,但是必须实现Ordered接口排序。
新版本中还加入了InstantiationAwareBeanPostProcessorAdapter抽象类


例子


以上例子简单打印了一些spring的生命周期信息,并且有一些先后顺序。在新版本中 init method和destroy method的配置改为@PostConstruct和@PreDestroy注解配置
BeanPostProcessor是一个扩展Spring的重要接口。


加入了一个新接口ApplicationContextAware 用户注入ApplicationContext。


BeanFactoryPostProcessor实在最开始执行的,可以在对象实例化后,有线修改。在Bean被Spring加载后,会生成一个BeanDefinition


此处配置了一些Processor,ApplicationContext在启动时候会自动加载这些Processor。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java的类与成员变量 下一篇C语言数组指针

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目