当前位置: 首页 > 面试题库 >

Spring中ApplicationContextAware如何工作?

从渊
2023-03-14
问题内容

在春季,如果实现了bean
ApplicationContextAware,则它可以访问applicationContext。因此,它能够获得其他豆类。例如

public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    public void setApplicationContext(ApplicationContext context) throws BeansException {
      applicationContext = context;
    }

    public static ApplicationContext getApplicationContext() {
      return applicationContext;
    }
}

然后SpringContextUtil.getApplicationContext.getBean("name")可以得到bean的“名称”。

要做到这一点,我们应该把这个SpringContextUtil里面的applications.xml,如

<bean class="com.util.SpringContextUtil" />

这里的bean SpringContextUtil不包含属性applicationContext。我想当spring
bean初始化时,就设置了这个属性。但是,这是怎么做的呢?该方法如何setApplicationContext调用?


问题答案:

当spring实例化bean时,它会寻找几个接口,例如ApplicationContextAwareInitializingBean。如果找到它们,则将调用这些方法。例如(非常简化)

Class<?> beanClass = beanDefinition.getClass();
Object bean = beanClass.newInstance();
if (bean instanceof ApplicationContextAware) {
    ((ApplicationContextAware) bean).setApplicationContext(ctx);
}

请注意,在较新的版本中,使用注释可能比实现特定于Spring的接口更好。现在您可以简单地使用:

@Inject // or @Autowired
private ApplicationContext ctx;


 类似资料:
  • 在spring中,如果一个bean实现了,那么它就能够访问。因此它能够得到其他的豆子。例如。 为此,我们应该将这个放在中,例如。 这里的bean不包括属性。我猜当spring bean初始化时,这个属性就被设置了。但这是怎么做到的呢?如何调用方法?

  • 问题内容: 我确实在项目中的三个模型对象之间有关系(文章末尾的模型和存储库片段)。 当我调用它时,会触发三个选择查询: (“ sql”) (对我而言)这是非常不正常的行为。据阅读Hibernate文档后所知,它应该始终使用JOIN查询。在类中更改为 查询时(带有附加SELECT 的查询)没有任何区别,而在类更改为 (使用JOIN查询时)则没有变化。 当我使用抑制射击时,有两个选择: 我的目标是在所

  • 我正在尝试在Springmvc中设置OpenSessionInViewInterceptor来修复:org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话。 下面是我已经拥有的代码以及错误的来源。 AppConfig.java featured.jsp ${article.user.isSubscribed()}抛出该错误很可能是因为无法提

  • 我正在编写一个Tomcat应用程序,它充当一些内部服务的代理。 我已经将Spring项目从基于XML和注释的混合配置切换到基于Java和注释的配置。 根身份验证筛选器的代码: 在我的控制器中,是正确的(不是null)。 我遵循了你所有的指示2。但现在我得到了一个例外:

  • 问题内容: 注释如何工作? 我的目标是仅在提供此类的类包含在类路径中时才加载特定的bean 。 我以为我可以一个注释与和Maven作为可选声明依赖性: 现在,任何具有as依赖关系的人都应该自动连接该bean。但是没有依赖项的任何人都应该跳过它。 但是,当我启动该应用程序时,出现以下错误: 所以我可能做错了。然后,如何在依赖关系jar和类路径中包含的类的条件下创建bean? 从春季文档: 必须存在的

  • 问题内容: 我有这样的代码: 资料库 服务 我不知道为什么我可以调用“ interface EquipmentRepository”方法。EquipmentRepository是一个接口,对吗? 问题答案: Spring Repository负责将DAO导入DI容器,并将未检查的异常导入Spring 。Spring Repository批注使用@Component批注进行元注释,以便将存储库类用于