`
ynztpwl
  • 浏览: 59478 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过ApplicationContextAware获取bean .

 
阅读更多

加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的

public void setApplicationContext(ApplicationContext context) throws BeansException

方法,获得ApplicationContext对象。

前提必须在Spring配置文件中指定该类

public class ApplicationContextRegister implements ApplicationContextAware {

private Log log = LogFactory.getLog(getClass());

public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
ContextUtils.setApplicationContext(applicationContext);
log.debug("ApplicationContext registed");
}

}

public class ContextUtils {

private static ApplicationContext applicationContext;

private static Log log = LogFactory.getLog(ContextUtils.class);

public static void setApplicationContext(ApplicationContext applicationContext) {
synchronized (ContextUtils.class) {
log.debug("setApplicationContext, notifyAll");
ContextUtils.applicationContext = applicationContext;
ContextUtils.class.notifyAll();
}
}

public static ApplicationContext getApplicationContext() {
synchronized (ContextUtils.class) {
while (applicationContext == null) {
try {
log.debug("getApplicationContext, wait...");
ContextUtils.class.wait(60000);
if (applicationContext == null) {
log.warn("Have been waiting for ApplicationContext to be set for 1 minute", new Exception());
}
} catch (InterruptedException ex) {
log.debug("getApplicationContext, wait interrupted");
}
}
return applicationContext;
}
}

public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}

}

配置文件:<bean class="com.sinotrans.framework.core.support.ApplicationContextRegister" />

正常情况:

  1. publicclassAppManagerextendsContextLoaderListenerimplementsServletContextListener{
  2. privateServletContextcontext;
  3. privateWebApplicationContextwebApplicationContext;
  4. publicvoidcontextInitialized(ServletContextEventsce){
  5. this.context=sce.getServletContext();
  6. this.webApplicationContext=WebApplicationContextUtils.getRequiredWebApplicationContext(context);
  7. this.context.setAttribute("WEBAPPLICATIONCONTEXT",webApplicationContext);
  1. HttpSessionsession=request.getSession();
  2. WebApplicationContextwebApplicationContext=(WebApplicationContext)session.getServletContext().getAttribute("WEBAPPLICATIONCONTEXT");
  3. UnsubscribeEmailFacadeunsubscribeEmailFacade=(UnsubscribeEmailFacade)webApplicationContext.getBean("unsubscribeEmailFacade");
分享到:
评论

相关推荐

    Web项目中获取SpringBean与在非Spring组件中获取SpringBean.pdf

    `@Autowired`注解会自动注入BeanFactory,由于它是静态的,所以在任何地方都可以直接通过`SpringWiredBean.beanFactory`获取Bean。 这种方法避免了在XML配置文件中添加额外的Bean声明,更加简洁。但是需要注意,...

    Java获取Bean的几种方式.pdf

    本文主要探讨了Java获取Bean的多种方式,尤其在Spring Boot和IOC(控制反转)环境下。这些方式可以帮助开发者便捷地从Bean容器中检索和使用所需的Bean。 1. **初始化时保存ApplicationContext对象** 当应用启动时...

    线程中获取spring 注解bean

    在提交任务时,可以将bean作为参数传递,或者在任务内部使用`ApplicationContextAware`接口获取应用上下文,从而获取bean。 4. **ApplicationContextAware**:让线程处理类实现`ApplicationContextAware`接口,...

    Spring在代码中获取bean的方法小结

    在非Spring管理的类中,如果该类由Spring初始化,我们可以创建一个持有ApplicationContext的成员变量,并使用`@Autowired`注解进行注入,再通过ApplicationContext获取Bean: ```java @Autowired private ...

    springboot 通过 ApplicationContextAware、ApplicationContext获取spring管理的bean-附件资源

    springboot 通过 ApplicationContextAware、ApplicationContext获取spring管理的bean-附件资源

    Spring通过ApplicationContext主动获取bean的方法讲解

    Spring通过ApplicationContext主动获取bean的方法讲解 今天,我们来讨论Spring框架中如何通过ApplicationContext主动获取bean的方法。这个问题在实际开发中非常常见,特别是在异步线程或某些特殊情况下无法使用...

    Spring在应用中获得Bean的方法

    实现`ApplicationContextAware`接口,可以获取到`ApplicationContext`的引用,然后通过它获取Bean。 ```java public class MyClass implements ApplicationContextAware { private ApplicationContext context; ...

    关于SpringBoot获取IOC容器中注入的Bean(推荐)

    这个类实现了`ApplicationContextAware`接口,使用`setApplicationContext`方法来设置`ApplicationContext`对象,然后提供了多个获取Bean对象的方法,例如`getBean(String name)`、`getBean(Class&lt;T&gt; clazz)`等。...

    Spring在代码中获取bean的几种方式详解

    在独立应用程序中,我们可以通过读取XML文件生成ApplicationContext对象,然后获取Bean实例。例如: ``` ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean(...

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    这是Spring提供的接口,用于获取bean和管理bean的生命周期。你可以通过实现ApplicationContextAware接口,或者直接在代码中创建ApplicationContext实例来访问bean。 5. **非Spring管理类调用bean**: 在非Spring...

    自定义标签中@Autowired的属性为null

    自定义标签中@Autowired的属性...1.新建一个类SpringContext,实现接口ApplicationContextAware; 2.spring.xml中添加&lt;bean id="" class="com............SpringContext"&gt; 3.使用SpingContext.getBean("bean名");获取

    Spring实现Aware接口自定义获取bean的两种方式

    ApplicationContextAware接口是Spring框架中的一种 Aware接口,通过实现该接口,可以获取ApplicationContext对象,从而获取bean对象。代码如下: @Service public class ApplicationContextHelper implements ...

    Spring启动后获取所有拥有特定注解的Bean实例代码

    在Bean的生命周期中,Spring提供了多种方式来获取Bean的实例,例如通过getBean方法、通过BeanFactory获取Bean实例等。 在获取所有拥有特定注解的Bean实例代码时,需要注意的是,ApplicationContextAware接口不能...

    基于java的企业级应用开发:Bean的生命周期.ppt

    - `ApplicationContextAware`的`setApplicationContext()`方法允许Bean获取到ApplicationContext,这样它可以访问其他Bean或者服务。 4. **BeanPostProcessor**: - BeanPostProcessor接口的`...

    Spring Bean生命周期.pdf

    这些接口允许Bean获取容器的相关信息,如Bean的名称、类加载器、Bean工厂等。 - InitializingBean:对应初始化阶段,它提供了afterPropertiesSet方法供开发者实现Bean初始化逻辑。 - DisposableBean:对应销毁阶段...

    获取Spring容器

    1. **类型转换**:当通过`ApplicationContextUtil.getBean`方法获取Bean时,需要进行类型转换,确保返回的Bean与预期的类型一致。 2. **线程安全性**:如果在多线程环境中使用`ApplicationContextUtil.getBean`方法...

    Spring中关于Bean的管理的课件

    4. **Spring的应用上下文(ApplicationContext)**:ApplicationContext是Spring的主要接口之一,它提供了获取Bean、处理消息和事件等功能,是Spring应用中的主要入口点。 5. **构造注入(constructor injection)*...

    JAVA核心知识点整理(有效)

    1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................

    spring的bean作用域

    自定义作用域需要实现ApplicationContextAware接口来获取ApplicationContext,并通过实现Scope接口来定义作用域的行为。 理解并正确使用Bean的作用域是优化Spring应用程序性能和资源管理的关键。选择合适的作用域...

Global site tag (gtag.js) - Google Analytics