spring在ioc的两个体现:一个是BeanFactory,一个是ApplicationContext。
一、BeanFactory
AliasRegistry: | 提供了注册、删除、获得以及是否是 别名 的方法。 |
BeanDefinitionRegistry: | 提供了注册、删除、获得以及是否包含 bean的定义 的等方法,并继承了AliasRegistry。 |
SimpleAliasRegistry: | 实现了AliasRegistry中的方法。 |
SimpleBeanDefinitionRegistry: | 实现了BeanDefinitionRegistry中的方法,并且继承了SimpleAliasRegistry。 |
SingletonBeanRegistry: | 提供了注册、获得以及是否包含 此beanName的单例对象 的等方法。 |
DefaultSingletonBeanRegistry: | 实现了SingletonBeanRegistry中的方法,并提供了删除 beanName的单例对象 的方法, 这里面还提供了bean的依赖bean、内部类bean,以及一次性bean的的注册和获得方法。 另外destroySingleton(String beanName)除了删除此 beanName的单例对象,还会删除 依赖bean、内部类bean,以及一次性bean。 另外,继承了SimpleAliasRegistry。 |
FactoryBeanRegistrySupport: | FactoryBean既是bean,又是一个factory,可以从中获取bean的对象。继承了DefaultSingletonBeanRegistry。 |
BeanFactory: | 提供了获取bean,判断是否包含此bean,判断此bean是否是单例或多例,获取别名,获取Class对象的方法。 从用户角度来说,获取bean是重要的,而创建bean并不是必须的,因为创建bean可以在获取bean的时候再创建。 |
HierarchicalBeanFactory: | 提供了获得父亲beanFactory,判断是否包含此bean的方法。继承BeanFactory。 |
AutowireCapableBeanFactory: | 提供了创建bean,装载bean,初始化bean的方法。继承BeanFactory。 |
ListableBeanFactory: | 提供了与BeanDefinition相关属性的方法。继承BeanFactory。 |
AbstractBeanFactory: | 提供了获取bean的实现和其他一些方法。 |
AbstractAutowireCapableBeanFactory: | 提供了创建bean的实现和其他一些方法。 |
DefaultListableBeanFactory: | 提供了BeanDefinitionRegistry、ListableBeanFactory中方法的实现和其他一些方法。 |
XmlBeanFactory: | 包含一个XmlBeanDefinitionReader,对xml的配置文件进行解析。 |
分析:
1. spring中类的命名一般和类中的主要方法的定义吻合,可以理解为一个具备这个行为的东东。从上面来看,有些类一看就符合这一点。有几个类需要多看两眼,并且分析一下。比如:ListableBeanFactory、DefaultListableBeanFactory、AbstractBeanFactory。ListableBeanFactory翻译成中文是可列表,可枚举的工厂,而枚举bean的话就需要从BeanDefinition中获取Class type,所以这个类还提供了和BeanDefinition相关属性的方法,而DefaultListableBeanFactory实现了ListableBeanFactory的同时还实现了BeanDefinitionRegistry就是这个原因。AbstractBeanFactory是因为实现了BeanFactory中的方法,就是获取bean的方法。
2. 以上类的继承关系还是比较清晰的,基本上每个类的命名和它里面的方法能够很好的对应起来。但是虽然我想把类图画的比较清晰,不发生交叉,还是发生了交叉。为了没有交叉,我的建议是把ConfigurableListableBeanFactory这个接口废弃掉,把它的方法抽取到它上面的接口中去,让DefaultListableBeanFactory直接实现ListableBeanFactory,这样避免了交叉。不过也许ConfigurableListableBeanFactory这个类有它的深义。
二、ApplicationContext
ApplicationEventPublisher: | 提供发布事件的方法。 |
MessageSource: | 提供了根据Locale获取信息的方法。国际化的作用。 |
ResourceLoader: | 资源加载器,提供根据地址获取资源的方法。 |
ResourcePatternResolver: | 提供了根据对应的资源描述的样式获取对应的资源数组。 |
DefaultResourceLoader: | 实现了ResourceLoader。 |
Lifecycle: | 提供了生命周期相关的开始、结束以及判断是否在运行中方法。 |
DisposableBean: | 提供了bean被销毁时释放资源的方法。 |
BeanNameAware: | 提供了把bean的name放到bean中的方法,因此要被beans实现。 |
InitializingBean: | 提供了bean属性全部设置后执行的方法,要被beans实现。 |
ApplicationContext: | 除继承ListableBeanFactory、HierarchicalBeanFactory、MessageSource、ApplicationEventPublisher、 ResourcePatternResolver外,还提供了获得AutowireCapableBeanFactory的方法。 |
ConfigurableApplicationContext: | 提供了增加beanFactory后处理、增加应用监听器、刷新的方法,还提供了获得 ConfigurableListableBeanFactory的方法。继承ApplicationContext、Lifecycle。 |
WebApplicationContext: | 提供了获得servletContext的方法,继承ApplicationContext。 |
ConfigurableWebApplicationContext: | 继承WebApplicationContext、ConfigurableApplicationContext外,还提供了一些方法。 |
AbstractApplicationContext: | 实现了ApplicationContext中获得AutowireCapableBeanFactory的方法。并且实现了其他一些方法。 增加了三个抽象的方法refreshBeanFactory()、closeBeanFactory()、以及返回类型为 ConfigurableListableBeanFactory的getBeanFactory()。 |
AbstractRefreshableApplicationContext: | 实现了AbstractApplicationContext中的refreshBeanFactory()、getBeanFactory()方法。 增加了loadBeanDefinitions(DefaultListableBeanFactory beanFactory)的抽象方法。 |
AbstractRefreshableConfigApplicationContext: | 提供了对configLocation的set、get操作。继承AbstractRefreshableApplicationContext, 并提供了对于BeanNameAware、InitializingBean的实现。 |
GenericApplicationContext: | 实现了AbstractApplicationContext中的refreshBeanFactory()、getBeanFactory()方法。增加了返回类型为 DefaultListableBeanFactory的getDefaultListableBeanFactory()方法。并实现了BeanDefinitionRegistry。 |
ResourceAdapterApplicationContext: | 提供了一个JCA ResourceAdapter的实现方法。 |
StaticApplicationContext: | 提供了注册单例bean、多例bean的方法,最终的注册是通过getDefaultListableBeanFactory()实现的,还提供了 增加国际化信息的方法。 |
AbstractXmlApplicationContext: | 提供了loadBeanDefinitions方法。 |
FileSystemXmlApplicationContext: | 在构造器里用方法描述加载的过程。 |
ClassPathXmlApplicationContext: | 在构造器里用方法描述加载的过程,并提供了从ClassPath寻找资源,并加载的构造器方法。 |
StaticWebApplicationContext: | 提供了postProcessBeanFactory,即Register request/session scopes的方法。 |
AbstractRefreshableWebApplicationContext: | 提供了postProcessBeanFactory和onRefresh方法。 |
XmlWebApplicationContext: | 提供了loadBeanDefinitions方法。 |
发表评论
-
winsw 服务权限获取
2021-11-28 08:55 579@echo off @echo 取得当前目录 pushd ... -
davinci mail配置
2021-11-09 23:31 535mail: host: smtp.126.com ... -
davinci启动过程中的坑
2021-11-09 23:16 5061、设置MainClass 首先,在configurati ... -
启动项目设置字符集
2021-11-06 10:39 501启动时指定编码格式,-Dfile.encoding=utf-8 ... -
mysql 设置root权限
2021-07-08 09:36 1931mysql> CREATE USER 'root'@' ... -
修改数据表和字段字符集
2021-06-07 17:33 1943-- 修改数据表和字段字符集 alter table t ... -
查看端口关闭端口
2021-05-31 11:53 1207netstat -aon|findstr "80 ... -
maven不能设置为Dynamic Web Module3.0解决方法
2017-10-13 11:25 782找到\项目名\.setting\文件夹下的 org.e ... -
solr部署
2012-06-13 09:53 1593前提: 1.装好JRE和JDK,设置环境变量 ... -
jvm 虚拟内存设置
2012-04-25 16:35 1545-Xmn512m -Xms1024m -Xmx1024m ... -
java mail 发邮件
2010-10-28 10:07 943import java.util.Date;impor ... -
Jboss自启动和优化+解决captcha在linux下不显示
2009-10-13 16:45 3302解决captcha在linux下不显示: 提示信息:& ... -
Linux上jboss集群配置
2009-10-13 16:44 1715集群安装和配置 on Linux 环境 2台Redhat s ... -
JAVA中文字符编码问题详解(3)
2009-10-13 14:59 3106五、对URL做Encode和Deco ... -
JAVA中文字符编码问题详解(2)
2009-10-13 14:57 2324四、JSP读取request.getParameter里的中文 ... -
JAVA中文字符编码问题详解(1)
2009-10-13 14:50 2477JAVA中文字符编码问题详 ...
相关推荐
在"spring源码全部uml类图"中,我们可以深入探讨Spring框架的内部结构和设计模式。 首先,Spring框架的核心组件包括IoC(Inversion of Control,控制反转)容器和AOP(Aspect-Oriented Programming,面向切面编程)...
2. **IoC 容器(Inversion of Control, IoC)**:IoC 容器是 Spring 提供的一种服务,负责创建对象、管理对象的生命周期以及对象间的依赖关系。ApplicationContext 和 BeanFactory 都是 IoC 容器的实现,它们通过...
在Spring框架中,BeanPostProcessor(BPP)是一个至关重要的接口,它允许用户自定义处理在Spring IoC容器中管理的bean的初始化前后过程。这个接口提供了两个核心的方法:`postProcessBeforeInitialization()` 和 `...
整理Spring IOC容器的存储结构类图,可以方便的观看类图,结合每个Spring IOC容器组件功能描述,整体把握Spring容器的设计基本思想
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
Spring IoC容器的UML类图可以帮助我们可视化地理解这些接口和类之间的关系,了解Bean定义如何被载入、解析和注册,以及依赖注入是如何工作的。BeanDefinition存储了Bean的元数据,包括类名、属性、依赖等,而...
1. 类图(Class Diagram):类图展示了Spring框架中的类和接口,以及它们之间的关系,如继承、实现、关联和依赖。这有助于我们了解Spring的核心组件,如ApplicationContext、BeanFactory、AOP代理等是如何组织的。 ...
标题中的“API 线索图”可能意味着本文将通过一种图解的方式,即流程图或者类图的形式,来阐述Spring AOP的编程思想和API的使用。 描述中,“小马哥讲 Spring AOP 编程思想”表明这是由一位专家小马哥讲解的内容,...
Spring中的BeanDefinition是核心概念,它是Spring IOC容器的基础,用于描述Bean的元数据,包括Bean的行为、依赖关系和其他配置信息。BeanDefinition包含了Bean的全限定类名、作用域、生命周期回调方法、依赖的其他...
在Spring中,IoC的实现形式为依赖注入。 - **目的**:减少代码之间的耦合度,提高代码的可维护性和可扩展性。 - **实现方式**:Spring通过容器管理对象的生命周期,并负责创建对象实例以及装配这些实例所需的依赖...
2. **IoC容器**:了解Bean的生命周期,以及如何通过XML或Java配置管理Bean。 3. **AOP**:学习如何定义切面、通知类型(前置、后置、环绕等),并应用到实际业务场景。 4. **Spring MVC**:用于构建Web应用程序,...
- **Spring框架**:包括Spring IoC(依赖注入)、AOP(面向切面编程)和ORM(对象关系映射),简化了企业级应用的开发。 - **Hibernate**:一个流行的ORM框架,用于简化数据库操作。 - **Eclipse开发工具**:Java...
15. **Spring和Struts2整合**:整合中主要通过Spring的IOC容器管理Action及其依赖,利用双方优势提升应用功能。 16. **Spring中Bean的id属性**:定义Bean的唯一标识,用于在容器中识别和定位Bean。 17. **MyBatis...
- MvcBeanFactory:从Spring IOC容器中扫描并加载MVC Bean。 - MvcBean:执行MVC业务逻辑的实体。 - MvcMapping:用于注解MVC Bean并配置URL路径。 3. UML类图和时序图: - 在初始化阶段,HttpServlet会启动,...
1. **Spring框架**:学习如何配置Spring的IoC容器,使用@Autowired注解自动装配依赖,以及AOP(面向切面编程)来实现事务管理。 2. **Spring MVC**:理解请求的生命周期,Controller如何处理请求,ModelAndView如何...
在建模时,Spring的IoC(控制反转)容器可以通过Bean图进行表示,这有助于理解对象的生命周期和依赖关系。 Ajax(Asynchronous JavaScript and XML)是一种用于创建交互式Web应用的技术,它允许页面部分刷新,提高...
3. **Spring集成**:Acegi与Spring紧密集成,利用Spring的IoC(Inversion of Control)容器来管理安全组件,使得整个系统的架构更加清晰,也便于与其他Spring模块协作。 4. **XML配置转换**:在传统的Acegi配置中,...
通过Spring的IoC容器,我们可以轻松管理对象的生命周期和它们之间的依赖关系。而AOP则用于处理那些横切多个对象的共同关注点,如日志、事务管理等,使业务逻辑更专注于核心功能。 Spring MVC是Spring框架的一部分,...
Spring框架是Java企业级应用中的核心组件,它的IoC(控制反转)和AOP(面向切面编程)原则可以通过UML的类图和序列图进行建模。我们可以用类图来展示Bean之间的关系,而序列图则能揭示在处理请求时,各Bean如何协同...
EJB & Spring部分涵盖了Enterprise JavaBeans(EJB)和Spring Framework的知识点,如EJB的组件、Spring的IoC容器等。 八、数据结构&算法&计算机基础部分: 数据结构&算法&计算机基础部分涵盖了数据结构、算法和...