《Spring技术内幕》学习笔记1——IoC容器体系结构

本文详细解析了Spring IoC容器的核心组件——BeanFactory和ApplicationContext的结构体系,包括它们的继承关系、主要功能及具体实现过程。重点介绍了ApplicationContext在BeanFactory基础上的功能扩展和应用场景,同时对XMLBeanFactory、BeanFactory接口及其主要方法进行了深入探讨。

1. BeanFactory类结构体系:

BeanFactory接口及其子类定义了Spring IoC容器体系结构,由于BeanFactory体系非常的庞大和复杂,因此要理解Spring IoC,需要先理清BeanFactory的继承机构。

2. ApplicationContext的结构体系:

ApplicationContext接口是一个BeanFactory基础上封装了更多功能的,Spring中最为常用的IoC容器,其包含两个子接口:ConfigurableApplicationContextWebApplicationContext

其结构体系如下:

 

详细的结构体系如下:

a.AbstractApplicationContext结构体系如下:

b.ConfigurablePortletApplicationContext体系结构如下:

c.ConfigurableWebApplicationContext结构体系如下:

2).WebApplicationContext体系结构如下:

3.Spring IoC容器的UML类图:

 

4.BeanFactory

BeanFactory接口定义了Spring IoC容器的基本功能规范,是Spring IoC容器所应遵守的最底层和最基本的编程规范。

BeanFactory接口中所定义的IoC容器的主要方法如下:

(1).Object getBean(Stringname) throws BeansException;

getBeanIoC容器中最重要的方法,通过该方法可以取得IoC容器中管理的BeanBean的取得是通过指定名字来进行所引的。

(2). <T> T getBean(String name, Class<T> requiredType) throws BeansException;

根据指定的名字和类型取得IoC容器中管理的Bean,和getBean(String name)方法类似,只是多提供了一个类型安全验证机制。

(3). <T> T getBean(Class<T> requiredType) throws BeansException;

根据指定的类型取得IoC容器中管理的Bean,该方法根据指定的类型调用ListableBeanFactory(BeanFactory下的)中的取得Bean方法,但是也可能根据给定的类型调用通过名字取得Bean的方法。

(4). Object getBean(String name, Object... args) throws BeansException;

该方法重载了getBean(String name)方法,可变参数主要用来指定是否显示使用静态工厂方法创建一个原型(prototype)Bean

(5). boolean containsBean(String name);

该方法让用户判断IoC容器中是否含有指定名字的Bean

(6). boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

该方法用来查询指定名字的Bean是否是单态类型(singleton)Bean

(7). boolean isPrototype(String name) throws NoSuchBeanDefinitionException;

该方法用来查询指定名字的Bean是否是原型(prototype)类型的Bean

(8). boolean isTypeMatch(String name, Class targetType)throws NoSuchBeanDefinitionException;

该方法用来查询指定名字的Beanclass类型是否支持特定的class类型。

(9). Class<?> getType(String name) throws NoSuchBeanDefinitionException;

该方法用来查询指定名字的Beanclass类型。

(10). String[] getAliases(String name);

该方法用来查询指定名字的Bean的所有别名。

5.XmlBeanFactory:

 

 

XmlBeanFactory只提供最基本的IoC容器功能,它主要读取以XML形式定义的BeanDefinition

(1). XmlBeanFactory源码:

 

  1. public class XmlBeanFactory extends DefaultListableBeanFactory {  
  2. //读取XML形式的Bean定义,然后解析XML生成IoC管理的Bean      
  3. private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);  
  4.     //Resouce是Spring中用来封装IO操作的接口  
  5.     public XmlBeanFactory(Resource resource) throws BeansException {  
  6.         this(resource, null);  
  7.     }  
  8. //调用父类的构造方法,同时调用loadBeanDefinitions方法从指定XML文件加载Bean定义  
  9.     public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {  
  10.         super(parentBeanFactory);  
  11.         this.reader.loadBeanDefinitions(resource);  
  12.     }  
  13. }   
 

 

(2).XmlBeanFactory实现IoC容器的基本过程:

 

  1. //创建IoC容器管理的Bean的xml配置文件,即定位资源  
  2. ClassPathResource resource = new ClassPathResource(“beans.xml”);  
  3. //创建BeanFactory  
  4. DefaultListableBeanFactory factory = new DefaultListableBeanFactory ();  
  5. //创键Bean定义读取器  
  6. XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);  
  7. //使用Bean定义读取器读入Bean配置信息,即载入配置  
  8. reader.loadBeanDefinitions(resource);  
 

 

6.ApplicationContext:

 

ApplicationContext是一个在BeanFactory基础进行功能扩展的,最常用的IoC容器。

(1).ApplicationContext的源码如下:

 

  1. public interface ApplicationContext extends ListableBeanFactory, HierarchicalBeanFactory,  
  2.         MessageSource, ApplicationEventPublisher, ResourcePatternResolver {  
  3.     //获取ApplicationContext的id  
  4.     String getId();  
  5.     //获取ApplicationContext的displayName  
  6.     String getDisplayName();  
  7.     //获取ApplicationContext第一次加载的时间戳  
  8.     long getStartupDate();  
  9.     //获取ApplicationContext容器的父容器  
  10.     ApplicationContext getParent();  
  11.     //获取自动装配功能的BeanFactory  
  12.     AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;  
  13. }  
 

 

 

(2).ApplicationContext的特性:

ApplicationContextSpring提供的一个高级的IoC容器,它除了能够提供IoC容器的基本功能外,还为用户提供了以下的附加服务:

a.支持不同的信息源:

ApplicationContext扩展了MessageSource接口,可以支持国际化的实现。

b.访问资源:

ApplicationContext继承了DefaultResourceLoader的子类,通过ResourceLoaderResource的支持,ApplicationContext可以加载不同地方的Bean定义资源文件,尤其可以从不同IO途径获取Bean定义信息。可以使用户程序灵活地定义Bean定义信息。

c.支持应用事件:

ApplicationContext继承了ApplicationEventPublisher接口,在程序上下文中引入了事件机制,这些事件和Bean生命周期的结合为Bean的过来提供了便利。

 

 

 

以上的这些图先对Spring IoC容器的类体系结构做一个宏观的认识,由于平时比较忙,以后抽空再逐步补充IoC容器初始化和依赖注入相关的内容。

 

 

转载:

 

http://blog.youkuaiyun.com/chjttony/article/details/6248682

内容概要:本文档介绍了基于3D FDTD(时域有限差分)方法在MATLAB平台上对微带线馈电的矩形天线进行仿真分析的技术方案,重点在于模拟超MATLAB基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]宽带脉冲信号通过天线结构的传播过程,并计算微带结构的回波损耗参数(S11),以评估天线的匹配性能和辐射特性。该方法通过建立三维电磁场模型,精确求解麦克斯韦方程组,适用于高频电磁仿真,能够有效分析天线在宽频带内的响应特性。文档还提及该资源属于一个涵盖多个科研方向的综合性MATLAB仿真资源包,涉及通信、信号处理、电力系统、机器学习等多个领域。; 适合人群:具备电磁场与微波技术基础知识,熟悉MATLAB编程及数值仿真的高校研究生、科研人员及通信工程领域技术人员。; 使用场景及目标:① 掌握3D FDTD方法在天线仿真中的具体实现流程;② 分析微带天线的回波损耗特性,优化天线设计参数以提升宽带匹配性能;③ 学习复杂电磁问题的数值建模与仿真技巧,拓展在射频与无线通信领域的研究能力。; 阅读建议:建议读者结合电磁理论基础,仔细理解FDTD算法的离散化过程和边界条件设置,运行并调试提供的MATLAB代码,通过调整天线几何尺寸和材料参数观察回波损耗曲线的变化,从而深入掌握仿真原理与工程应用方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值