`

spring之BeanNameAware

阅读更多
//BeanNameAware该接口主要用于获取自身在spring中的名称
public interface BeanNameAware extends Aware {

	void setBeanName(String name);

}

//其实现原理也是在创建bean的时候进行注入
//AbstractAutowireCapableBeanFactory类下
protected Object initializeBean(final String beanName, final Object bean, RootBeanDefinition mbd) {
		if (System.getSecurityManager() != null) {
			AccessController.doPrivileged(new PrivilegedAction<Object>() {
				@Override
				public Object run() {
					invokeAwareMethods(beanName, bean);
					return null;
				}
			}, getAccessControlContext());
		}
		else {   
		        //这里初始化
			invokeAwareMethods(beanName, bean);
		}

		Object wrappedBean = bean;
		if (mbd == null || !mbd.isSynthetic()) {
			wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
		}

		try {
			invokeInitMethods(beanName, wrappedBean, mbd);
		}
		catch (Throwable ex) {
			throw new BeanCreationException(
					(mbd != null ? mbd.getResourceDescription() : null),
					beanName, "Invocation of init method failed", ex);
		}

		if (mbd == null || !mbd.isSynthetic()) {
		         
			wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
		}
		return wrappedBean;
	}


private void invokeAwareMethods(final String beanName, final Object bean) {
		if (bean instanceof Aware) {
		        //注入beanName
			if (bean instanceof BeanNameAware) {
				((BeanNameAware) bean).setBeanName(beanName);
			}
			//注入加载bean的类加载器
			if (bean instanceof BeanClassLoaderAware) {
				((BeanClassLoaderAware) bean).setBeanClassLoader(getBeanClassLoader());
			}
			//注入BeanFactory
			if (bean instanceof BeanFactoryAware) {
				((BeanFactoryAware) bean).setBeanFactory(AbstractAutowireCapableBeanFactory.this);
			}
		}
	}

分享到:
评论

相关推荐

    Spring-Reference_zh_CN(Spring中文参考手册)

    BeanNameAware 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.1.1. 使用BeanPostProcessor的Hello World示例 3.7.1.2. RequiredAnnotationBeanPostProcessor示例 3.7.2. 用...

    Spring官方文档之核心篇

    Spring还支持自定义Bean的属性,包括Aware接口的使用,例如ApplicationContextAware或BeanNameAware。 - **Aware接口**:通过实现特定的Aware接口,Bean可以获得Spring容器中的资源和信息。 - **自定义属性**:...

    struts2与spring2的整合

    5. **Action类**:Action类需要实现Spring的`org.springframework.beans.factory.BeanNameAware`接口,以便在初始化时获取Bean的名字。此外,Action类无需包含构造函数,因为其实例化工作将由Spring完成。 6. **...

    Spring Bean生命周期.pdf

    其中,Spring Bean生命周期的管理是Spring框架的核心功能之一,它涉及Spring容器如何创建、配置以及销毁Bean的整个过程。理解Spring Bean的生命周期对于开发高效和可维护的Java应用至关重要。 Spring Bean生命周期...

    lib-springMVC

    java.lang.NoClassDefFoundError: org/springframework/beans/factory/BeanNameAware 1 2 根据错误加入 spring-beans-4.x.x.RELEASE.jar 1 2 接着报错 java.lang.NoClassDefFoundError: org/springframework/...

    Spring.pdf

    Spring框架中的Bean生命周期管理是Spring容器的基本工作之一。它涉及到从创建Bean实例、配置所有属性、到初始化完成后的可用以及销毁实例前的清理等一系列过程。掌握Spring Bean的生命周期对于理解Spring框架的运行...

    Spring中关于Bean的管理的课件

    在Spring框架中,Bean的管理是其核心特性之一,它涉及到Bean的创建、初始化、装配以及销毁等整个生命周期过程。本课件主要涵盖了以下几个关键知识点: 1. **控制反转(IoC)和依赖注入(DI)**:Spring的核心设计...

    Spring系列面试题129道(附答案解析)

    43、指出在springaop中concern和cross-cuttingconcern的不同之处。 在Spring AOP中,concern指的是应用程序中的业务逻辑代码,而cross-cutting concern是横切关注点,如日志记录、事务管理等,这些关注点贯穿多个...

    Spring bean 管理

    Spring的核心之一是Spring容器,它负责管理应用程序中所有组件的生命周期和依赖关系。Spring容器中最为常见的组件是Bean,它是Spring容器管理的对象实例。 在Spring中,Bean的管理包含多个方面:创建Bean实例、配置...

    Spring Reference Core Technologies

    单例作用域是最常用的作用域之一,意味着在Spring IoC容器中只存在一个Bean实例。 - **1.5.2 原型作用域** 原型作用域意味着每次请求都会创建一个新的Bean实例。 - **1.5.3 单例Bean与原型Bean的依赖** 当...

    Spring Reference - Core Technologies.pdf

    1.6.2 ApplicationContextAware和BeanNameAware接口 实现这两个接口可以让Bean感知到Spring容器以及自己的Bean名称。 1.6.3 其他Aware接口 Spring提供了多个Aware接口,如ResourceLoaderAware、...

    spring教程(ppt版)

    ApplicationContext建立在BeanFactory之上,提供了更丰富的功能,如国际化支持、文件资源载入和事件发布机制。 【BeanFactory】BeanFactory是一个工厂设计模式的实现,负责创建和管理bean。通过调用`getBean()`方法...

    Spring特性——Aware感知特性

    在Spring框架中,Aware接口系列是其核心特性之一,它为Spring容器提供了向bean注入上下文信息的能力。这些接口让bean能够感知到Spring容器的存在,从而获取必要的服务或配置信息。下面我们将深入探讨Spring的Aware...

    com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean,BeanDefinitionRegistryPostProcessor,BeanFactoryPostProcessor,BeanPostProcessor,ResourceLoaderA

    com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean...

    详细的Spring配置和Spring Boot-外文翻译

    为此,Spring提供了两个接口:BeanNameAware和ApplicationContextAware(在第3章末尾介绍)。这两个接口分别允许你的bean获取其分配的名字并引用它的ApplicationContext。本章将涵盖实现这些接口以及在应用程序中...

    spring相关面试题.docx

    - 如果实现了特定接口,如`BeanNameAware`、`BeanFactoryAware`或`ApplicationContextAware`,则调用相应的方法 - 如果实现了`BeanPostProcessor`,执行`postProcessBeforeInitialization`方法 - 如果实现了`...

    Spring5.0中文开发手册

    IoC(Inversion of Control)容器是Spring框架的核心特性之一,它负责管理应用程序的对象或bean的生命周期和配置。通过Spring IoC容器,可以将对象的创建、配置和组装的责任从应用程序代码中分离出来。 - **3.2 ...

    spring-3.1.0中文版api帮助文档

    - **回调机制**:列出Spring支持的各种回调接口,如BeanNameAware、BeanFactoryAware等,并解释其触发时机。 **2.10 命名空间** - **实用工具**:描述`&lt;util/&gt;`命名空间提供的便捷功能,简化配置文件编写。 **...

    spring面试总结

    Spring的核心特性之一是反转控制(IoC),它通过容器管理对象的生命周期和依赖关系。在Spring中,我们可以使用XML配置文件(如`beans.xml`)来声明Bean的定义,然后由容器负责创建和管理这些对象。例如,`&lt;bean&gt;`...

Global site tag (gtag.js) - Google Analytics