代码编织梦想

一、如何扩展

  • 1.通过实现bean工厂的后置处理器(BeanFactoryPostProcessor)来扩展

二、示例截图

在这里插入图片描述

三、代码示例

package com.learning.beanDefinitionExtension;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;

/**
 * @Author wangyouhui
 * @Description bean工厂后置处理器
 **/
@Component
public class BeanFactoryPostProcessor implements org.springframework.beans.factory.config.BeanFactoryPostProcessor {
	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		// 在所有BeanDefinition注册完之后调用
		for(String beanDefinitionName : beanFactory.getBeanDefinitionNames()){
			System.out.println(beanDefinitionName);
		}
		BeanDefinition userService = beanFactory.getBeanDefinition("userService");
		// 修改为多例
		userService.setScope(BeanDefinition.SCOPE_PROTOTYPE);
	}
}

package com.learning.beanDefinitionExtension;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author wangyouhui
 * @Description 配置类
 **/
@Configuration
public class BeanConfig {
	@Bean
	public UserService userService(){
		return new UserService();
	}

	@Bean
	public BeanFactoryPostProcessor beanFactoryPostProcessor(){
		return new BeanFactoryPostProcessor();
	}
}

package com.learning.beanDefinitionExtension;

import org.springframework.stereotype.Component;

/**
 * @Author wangyouhui
 * @Description bean
 **/
@Component
public class UserService {
	public UserService(){
		System.out.println("对象实例化完成");
	}
}

package com.learning.beanDefinitionExtension;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @Author wangyouhui
 * @Description 启动类
 **/
public class Applicaiton {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
		UserService bean1 = applicationContext.getBean(UserService.class);
		UserService bean2 = applicationContext.getBean(UserService.class);
		// 改为多例后判断是否相同,false则表示多例设置成功
		System.out.println(bean1 == bean2);
	}
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32088869/article/details/129630266

spring源码-如何修改beandefinition的属性_geomon的博客-爱代码爱编程_修改beandefinition

Spring源码-如何修改BeanDefinition的属性 在实际开发中,我们有的时候并不是把所有的核心配置文件都存放到本地配置文件xxx..properties中的,而是通过远程去加载对应的配置文件信息。有的公司还有自己的独立配置中心系统,主要用来管理所有配置信息的。基于这个需求,其实我们利用Spring的后置处理器BeanFactoryPostPr

spring源码:注册beandefinition(xml方式)_bronze5的博客-爱代码爱编程

一、目的 前面讲到spring读取xml文件后,会得到一个Document对象。接下来就要解析Document转换为spring认识的BeanDefinition( 具体实现为GenericBeanDefinition)对

spring源码:bean标签的解析之创建beandefinition-爱代码爱编程

一、BeanDefinition介绍 BeanDefinition 是一个接口,在 Spring 中存在六种实现: AnnotatedGenericBeanDefinition:注解beanChildBeanDefini

spring源码分析之BeanDefinition相关-爱代码爱编程

目录 前言: BeanDefinition的家族系列 1、BeanDefintion的UML类图 2、BeanDefintion家族类详解 2.1、通用接口 2.2、BeanDefintion接口 2.3、AbstractBeanDefintion抽象类 2.4、GenericBeanDefinition类 2.5、 AnnotatedG

spring源码系列一--BeanDefinition-爱代码爱编程

BeanDefinition是整个Spring实现IOC的核心,也是整个Spring框架的核心,我们在阅读源码之前必须要先搞懂BeanDefinition的含义,以及相应的成员变量,BeanDefinition是一个接口,在Spring中有很多实现类,不同的实现类都有不同的功能。本文会列举我们在阅读源码过程中会遇到的BeanDefinition的实现类以及

Spring扩展点总结-爱代码爱编程

BeanDefinition与BeanFactory扩展 在Spring生成bean的过程这篇文章中,我们了解了spring在生成bean前会先生成bean的定义,然后注册到BeanFactory中,再之后才能生成bean。那么对于从xml配置好的BeanDefinition,如果想要增加删除修改该怎么办呢? 1.1 BeanDefinitionReg

Spring源码解析一——BeanDefinition和Bean以及BeanWrapper-爱代码爱编程

BeanDefinition是什么 BeanDefinition顾名思义是Bean的定义信息,BeanDefinition和Bean的区别类似于类和对象的区别, BeanDefinition描述一个bean实例,它有属性值,构造函数参数值,以及具体实施。 BeanDefinition用来描述Bean,里边存放的是Bean的元数据,比如Bean类名,属

Spring之BeanDefinition详解-爱代码爱编程

前言 Spring在初始化过程中,将xml中定义的对象解析到了BeanDefinition对象中,我们有必要了解一下BeanDefinition的内部结构,有助于我们理解Spring的初始化流程。 一、BeanDefinition接口 下面我们翻译其注释。 A BeanDefinition describes a bean instance,

Spring-ApplicationContext的初始化与BeanDefinition的注册-爱代码爱编程

文章目录 前言一、BeanFactory二、容器的初始化三、ClassPathXmlApplicationContext的实现1.BeanFactory的创建2.BeanDefinition的载入3.BeanDefinition在IoC容器中的注册总结 前言 控制反转(Inversion of Control),也称为依赖注入,许多应用都是由

spring beandefinition详解_少年.的博客-爱代码爱编程

BeanDefinition是定义Bean的配置元信息的接口,包含: parentName父beanclassNamebean类名scope作用域isLazyInit是否懒加载dependsOn依赖的beanisAutow

spring容器创建过程源码学习-beandefinition 的注册(一)_zhangdx_的博客-爱代码爱编程

BeanDefinition是在Spring 容器创建过程中用来描述Bean的一个对象,包含了Bean属性值、构造函数值以及一些其他定义的信息, 在容器创建之后,按照加载的BeanDefinition对象去创建相应的Bea

spring扩展点-爱代码爱编程

  1.BeanDefinitionRegistryPostProcessor接口 BeanDefinitionRegistryPostProcessor接口继承了BeanFactoryPostProcessor接口,BeanFactoryPostProcessor接口随后我们也会讲到这个接口。 /** * Extension to the s