//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);
}
}
}
分享到:
相关推荐
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还支持自定义Bean的属性,包括Aware接口的使用,例如ApplicationContextAware或BeanNameAware。 - **Aware接口**:通过实现特定的Aware接口,Bean可以获得Spring容器中的资源和信息。 - **自定义属性**:...
5. **Action类**:Action类需要实现Spring的`org.springframework.beans.factory.BeanNameAware`接口,以便在初始化时获取Bean的名字。此外,Action类无需包含构造函数,因为其实例化工作将由Spring完成。 6. **...
其中,Spring Bean生命周期的管理是Spring框架的核心功能之一,它涉及Spring容器如何创建、配置以及销毁Bean的整个过程。理解Spring Bean的生命周期对于开发高效和可维护的Java应用至关重要。 Spring Bean生命周期...
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框架中的Bean生命周期管理是Spring容器的基本工作之一。它涉及到从创建Bean实例、配置所有属性、到初始化完成后的可用以及销毁实例前的清理等一系列过程。掌握Spring Bean的生命周期对于理解Spring框架的运行...
在Spring框架中,Bean的管理是其核心特性之一,它涉及到Bean的创建、初始化、装配以及销毁等整个生命周期过程。本课件主要涵盖了以下几个关键知识点: 1. **控制反转(IoC)和依赖注入(DI)**:Spring的核心设计...
43、指出在springaop中concern和cross-cuttingconcern的不同之处。 在Spring AOP中,concern指的是应用程序中的业务逻辑代码,而cross-cutting concern是横切关注点,如日志记录、事务管理等,这些关注点贯穿多个...
Spring的核心之一是Spring容器,它负责管理应用程序中所有组件的生命周期和依赖关系。Spring容器中最为常见的组件是Bean,它是Spring容器管理的对象实例。 在Spring中,Bean的管理包含多个方面:创建Bean实例、配置...
单例作用域是最常用的作用域之一,意味着在Spring IoC容器中只存在一个Bean实例。 - **1.5.2 原型作用域** 原型作用域意味着每次请求都会创建一个新的Bean实例。 - **1.5.3 单例Bean与原型Bean的依赖** 当...
1.6.2 ApplicationContextAware和BeanNameAware接口 实现这两个接口可以让Bean感知到Spring容器以及自己的Bean名称。 1.6.3 其他Aware接口 Spring提供了多个Aware接口,如ResourceLoaderAware、...
ApplicationContext建立在BeanFactory之上,提供了更丰富的功能,如国际化支持、文件资源载入和事件发布机制。 【BeanFactory】BeanFactory是一个工厂设计模式的实现,负责创建和管理bean。通过调用`getBean()`方法...
在Spring框架中,Aware接口系列是其核心特性之一,它为Spring容器提供了向bean注入上下文信息的能力。这些接口让bean能够感知到Spring容器的存在,从而获取必要的服务或配置信息。下面我们将深入探讨Spring的Aware...
com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean...
为此,Spring提供了两个接口:BeanNameAware和ApplicationContextAware(在第3章末尾介绍)。这两个接口分别允许你的bean获取其分配的名字并引用它的ApplicationContext。本章将涵盖实现这些接口以及在应用程序中...
- 如果实现了特定接口,如`BeanNameAware`、`BeanFactoryAware`或`ApplicationContextAware`,则调用相应的方法 - 如果实现了`BeanPostProcessor`,执行`postProcessBeforeInitialization`方法 - 如果实现了`...
IoC(Inversion of Control)容器是Spring框架的核心特性之一,它负责管理应用程序的对象或bean的生命周期和配置。通过Spring IoC容器,可以将对象的创建、配置和组装的责任从应用程序代码中分离出来。 - **3.2 ...
- **回调机制**:列出Spring支持的各种回调接口,如BeanNameAware、BeanFactoryAware等,并解释其触发时机。 **2.10 命名空间** - **实用工具**:描述`<util/>`命名空间提供的便捷功能,简化配置文件编写。 **...
Spring的核心特性之一是反转控制(IoC),它通过容器管理对象的生命周期和依赖关系。在Spring中,我们可以使用XML配置文件(如`beans.xml`)来声明Bean的定义,然后由容器负责创建和管理这些对象。例如,`<bean>`...