当前位置: 首页 > news >正文

网站怎样和首页做链接什么网站免费可以做app

网站怎样和首页做链接,什么网站免费可以做app,镇江丹阳怎么样,龙岩网站推广公司Spring的ApplicationContext是Spring框架中的核心接口之一,它扩展了BeanFactory接口,提供了更多的高级特性,如事件发布、国际化支持、资源访问等。ApplicationContext的装载过程是Spring框架中非常重要的一个环节。以下是ApplicationContext装…

Spring的ApplicationContext是Spring框架中的核心接口之一,它扩展了BeanFactory接口,提供了更多的高级特性,如事件发布、国际化支持、资源访问等。ApplicationContext的装载过程是Spring框架中非常重要的一个环节。以下是ApplicationContext装载过程的源码分析:

1. 创建ApplicationContext实例
装载过程的第一步是创建一个ApplicationContext的实例。这通常通过调用ClassPathXmlApplicationContext、FileSystemXmlApplicationContext或AnnotationConfigApplicationContext等具体实现类的构造函数来完成。

ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);
2. 初始化BeanFactory
在ApplicationContext的实现类中,装载过程首先会初始化一个DefaultListableBeanFactory实例,这是BeanFactory的一个具体实现。

DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
3. 设置BeanFactory属性
接着,ApplicationContext会设置BeanFactory的一些属性,如类加载器、Bean表达式解析器等。

beanFactory.setBeanClassLoader(getClassLoader());
beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver(beanFactory));
4. 注册BeanPostProcessors
ApplicationContext会注册所有的BeanPostProcessor实现类。这些处理器会在Bean的初始化前后被调用。

beanFactory.addBeanPostProcessor(new MyBeanPostProcessor());
5. 装载Bean定义
根据ApplicationContext的具体实现,它会从不同的源装载Bean定义。例如,ClassPathXmlApplicationContext会从类路径下的XML文件中装载Bean定义。

loadBeanDefinitions(beanFactory);
6. 初始化MessageSource
如果需要,ApplicationContext会初始化一个MessageSource用于国际化。

initMessageSource();
7. 初始化应用事件多播器
ApplicationContext会初始化一个应用事件多播器,用于事件发布和监听。

initApplicationEventMulticaster();
8. 注册事件监听器
注册所有的事件监听器。

registerEventListeners();
9. 初始化其他基础设施
初始化其他Spring框架的基础设施,如ResourcePatternResolver等。

10. 调用BeanFactory的preInstantiateSingletons方法
这个方法会触发所有剩余的非懒加载的单例Bean的初始化。

beanFactory.preInstantiateSingletons();
11. 调用refresh()方法
最后,ApplicationContext会调用自身的refresh()方法来完成装载过程。这个方法会执行上述所有步骤,并确保容器完全初始化和就绪。

public void refresh() throws BeansException, IllegalStateException {
// …
}
refresh()方法是装载过程的核心,它协调了容器的初始化和Bean的创建。通过分析refresh()方法的源码,我们可以深入理解Spring容器是如何工作的。

请注意,上述步骤可能会根据不同的ApplicationContext实现类和配置有所变化。此外,Spring框架的版本更新也可能带来一些实现上的变化。上述分析基于Spring框架的一般装载过程。

BeanFactoryPostProcessor源码分析

BeanFactoryPostProcessor是Spring框架中的一个重要接口,它允许开发者在容器实例化和属性赋值完成后,初始化Bean之前,执行一些自定义逻辑。BeanFactoryPostProcessor接口定义了一个方法:

public interface BeanFactoryPostProcessor {
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}
源码分析
在Spring容器初始化过程中,BeanFactoryPostProcessor的逻辑主要在AbstractApplicationContext类中实现。以下是源码分析的关键点:

注册BeanFactoryPostProcessor: 在容器初始化时,所有的BeanFactoryPostProcessor实现类都会被注册到容器中。

调用postProcessBeanFactory: 在BeanFactory的标准初始化之后,容器会调用所有注册的BeanFactoryPostProcessor的postProcessBeanFactory方法。这个方法允许开发者查看和修改BeanFactory中的Bean定义。

修改Bean定义: 在postProcessBeanFactory方法中,开发者可以添加新的Bean定义、修改现有Bean定义、或者删除某些Bean定义。

应用顺序: BeanFactoryPostProcessor的实现类可以定义它们的应用顺序。如果需要,可以通过实现Ordered接口或使用@Order注解来指定顺序。

调用时机: BeanFactoryPostProcessor的调用发生在Bean的属性赋值之后,初始化之前。这意味着,此时Bean的属性已经设置完成,但Bean还没有被初始化。

异常处理: 如果在BeanFactoryPostProcessor的调用过程中抛出了异常,容器会捕捉这个异常,并传播出去。

与BeanPostProcessor的区别: BeanFactoryPostProcessor作用于BeanFactory,而BeanPostProcessor作用于具体的Bean。BeanFactoryPostProcessor可以在Bean初始化之前对BeanFactory进行修改,而BeanPostProcessor可以在Bean的初始化过程中插入自定义逻辑。

示例
下面是一个简单的BeanFactoryPostProcessor实现示例,它在BeanFactory初始化后打印所有Bean定义的名称:

public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {String[] beanNames = beanFactory.getBeanDefinitionNames();System.out.println("Bean names after BeanFactoryPostProcessor: ");for (String beanName : beanNames) {System.out.println(beanName);}
}

}
通过实现BeanFactoryPostProcessor接口,开发者可以在Spring容器初始化Bean之前,对BeanFactory进行自定义操作,这为实现一些高级特性提供了可能,例如自动装配、Bean定义的动态修改等。

BeanDefinitionRegistryPostProcessor源码分析

BeanDefinitionRegistryPostProcessor 是 Spring 框架中的一个接口,它扩展了 BeanFactoryPostProcessor 接口。与 BeanFactoryPostProcessor 相比,BeanDefinitionRegistryPostProcessor 提供了对 BeanDefinitionRegistry 的访问,允许在 post-processing 阶段注册新的 BeanDefinition。这使得开发者可以在容器的 BeanDefinition 加载完成之后、实例化 Bean 之前,动态地添加或修改 BeanDefinition。

以下是 BeanDefinitionRegistryPostProcessor 接口的定义:

public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {

/*** 在 BeanFactoryPostProcessor 的 postProcessBeanFactory 调用之后调用。* 允许在 BeanDefinitionRegistry 中注册更多的BeanDefinition。* @param registry BeanDefinitionRegistry 的实例* @throws org.springframework.beans.BeansException*/
void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException;

}
源码分析
扩展 BeanFactoryPostProcessor:BeanDefinitionRegistryPostProcessor 接口继承自 BeanFactoryPostProcessor,因此它拥有 postProcessBeanFactory 方法的能力,并且可以访问 ConfigurableListableBeanFactory。

postProcessBeanDefinitionRegistry 方法:这是 BeanDefinitionRegistryPostProcessor 的核心方法,它允许开发者在 BeanDefinitionRegistry 中注册新的 BeanDefinition 或修改现有的 BeanDefinition。

调用时机:postProcessBeanDefinitionRegistry 方法在 postProcessBeanFactory 方法之后调用,确保开发者在注册新的 BeanDefinition 时,已有的 BeanDefinition 已经加载完成。

BeanDefinitionRegistry:BeanDefinitionRegistry 是一个接口,它定义了注册、移除和获取 BeanDefinition 的方法。postProcessBeanDefinitionRegistry 方法提供了对 BeanDefinitionRegistry 的访问,使得开发者可以操作 BeanDefinition。

BeanDefinition 的动态注册:开发者可以在 postProcessBeanDefinitionRegistry 方法中使用 BeanDefinitionRegistry 的 registerBeanDefinition 方法来注册新的 BeanDefinition。

BeanDefinition 的修改:除了注册新的 BeanDefinition,开发者还可以修改现有的 BeanDefinition,例如更改 Bean 的作用域、添加属性等。

异常处理:如果在 postProcessBeanDefinitionRegistry 方法中抛出异常,容器会捕捉这个异常并传播出去,这可能会中断 Bean 的创建过程。

示例
下面是一个简单的 BeanDefinitionRegistryPostProcessor 实现示例,它在 BeanDefinitionRegistry 中注册一个新的 BeanDefinition:

public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {// 可以在这里访问和修改 beanFactory
}@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {// 注册一个新的 BeanDefinitionRootBeanDefinition beanDefinition = new RootBeanDefinition(MyBean.class);registry.registerBeanDefinition("myBean", beanDefinition);
}

}
通过实现 BeanDefinitionRegistryPostProcessor 接口,开发者可以在 Spring 容器的 BeanDefinition 加载完成后,动态地注册或修改 BeanDefinition,这为实现一些复杂的配置和自定义行为提供了强大的支持。

http://www.yayakq.cn/news/968997/

相关文章:

  • 专业的图纸设计网站网站是否有管理员权限
  • 网站门户个人博客网站模板源码
  • 成都网站建设优选推来客网站怎么做下载功能
  • 做百度网站需要钱吗网站开发和数据库哪个有前途
  • 豌豆荚app下载seo是什么职业岗位
  • 服务类型的网站怎么做wordpress无法发布文章502
  • 外贸开发产品网站模板wordpress 图片加载慢
  • 手机qq钓鱼网站怎么做做模拟人生比较有名的网站
  • 杭州手机网站制作电脑公司基本营销策略有哪些
  • 做网站维护费是怎么算的私人承接软件开发定制
  • 网站建设技术网站建谈谈网站建设会有哪些问题
  • 网站建设学手机网站用什么软件做的好
  • 电话销售企业网站怎么做wordpress自媒体新闻模板
  • 普宁网站建设雅安做网站
  • 做外单网站有哪些wordpress琪亚娜
  • c网站开发源代码做h的小说网站有哪些
  • 网站开发语音优化大师免费版
  • 双域名网站直播平台开发费用
  • 一个ip可以建设多少个网站苏州网络推广定制
  • 公司免费网站wordpress如何设置用户登录
  • 网络安全网站wordpress jpress
  • 类似猪八戒的网站建设广州seo好找工作吗
  • 正规的佛山网站建设价格注册账号
  • 如何自己做网站手机行业门户网站 建站
  • 长春做公司网站国内十大网站排名
  • 和动物做的网站WordPress网页编辑插件
  • 门户网站后台管理模板制作网页网站用的是什么
  • 网站开发网站设计制作团购网站建设怎么样
  • wordpress淘宝客网站模板深圳做积分商城网站建设
  • 哪个做网站wordpress nas 外网