`

【转】web后台线程中获取spring容器内的bean

 
阅读更多

有时候需要启动一个后台守护线程,做一些别的事情。这时候怎么获取spring里的Service、Dao、Action等对象?(注意自己new一个是不行的,因为脱离了spring的管理,其中IoC资源都没有被注入)。

一个解决办法是,重新弄一个Spring:


   XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource(
     "applicationContext.xml"));

   // 从配置文件中获取对象
   IService hello = (IService) factory.getBean("service");
   hello.service("Helloween");

   factory.destroySingletons();

这是最笨的办法,也是不科学的。这样的话,web中会有两个spring容器,两套service、dao等。

--------------------------------------------------------------

比较科学的办法,是用Spring的方法获取到当前的容器(也是当前应用下唯一的spring容器),并从中获取资源。代码为:


   WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
   IService service = (IService) context.getBean("service");

----------------------------------------------------------------

ContextLoader.getCurrentWebApplicationContext()方法 可以从spring的加载listener中追踪到:

<listener>
   <listener-class>
    org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>

看一下这个类的代码就知道了。

分享到:
评论

相关推荐

    4 后台使用Spring中的Bean质量评估193210111党涛1

    在Spring框架中,Bean是应用程序的核心组成部分,它们由Spring容器管理并负责实例化、装配以及初始化。本节主要探讨了Spring中Bean的四种创建方式及其优缺点。 首先,Spring中的Bean默认是单例模式,这意味着在整个...

    spring-framework-4.2.1.RELEASE-dist.zip

    4. 异步方法支持:Spring 4.2引入了异步方法执行的支持,通过`@Async`注解,可以在后台线程中执行方法,提高应用的并发性能。 5. Spring Expression Language (SpEL)增强:Spring的表达式语言在4.2版本中进行了优化...

    Springboot 通过ThreadPoolTaskScheduler实现定时任务.rar

    与`ScheduledExecutorService`不同,`ThreadPoolTaskScheduler`是Spring的`TaskScheduler`接口的一个实现,它提供了与Spring容器的集成,可以方便地注入bean并进行依赖注入。 2. **如何使用ThreadPoolTaskScheduler...

    spring中文API 3.x 2.x版本

    6. **Async Support**:引入异步处理支持,允许在后台线程中执行方法,提高应用性能。 7. **Web Flow**:提供了流程控制和状态管理的框架,适用于构建复杂的交互式Web应用。 这些文档对于学习和使用Spring框架的...

    spring整合JPBM3.2

    通过以上步骤,开发者可以实现Spring容器对Jbpm的管理和控制,实现流程的自动化启动、任务调度以及事务管理等高级功能。在实际开发过程中,根据具体需求,可能还需要对异常处理、日志记录、权限控制等方面进行定制化...

    Spring源码深度解析与注解驱动开发1

    2. 异步请求:Spring MVC提供了异步处理能力,通过`@Async`注解,可以在后台线程中执行耗时操作,而不阻塞主线程。 四、组件注册 1. `@ComponentScan`:这个注解用于自动扫描指定包下的组件(标记了@Controller, @...

    Apress.Pro.Spring.4th.Edition

    在Spring框架中,IoC容器负责管理对象的生命周期及其依赖关系。 - **DI(Dependency Injection)**:依赖注入是实现IoC的一种方式,通过外部容器来注入对象所依赖的对象,而不是在对象内部创建或查找依赖对象。 ###...

    spring-framework-3.1.0.M1

    3. @Async异步处理:在方法上添加@Async注解,可以让该方法在后台线程中异步执行,提高了系统并发处理能力。 4. 数据源支持:Spring 3.1.0提供了对多数据源的支持,方便在分布式环境中处理多个数据库。 5. NoSQL...

    spring-framework-3.1.0.M2-with-docs 3-3

    3. **Async Support**:添加了异步处理支持,允许方法在后台线程中执行,提高了系统的并发性能。 4. **JavaConfig**:增强了Java配置的支持,使得开发者可以完全用Java代码替代XML配置。 5. **MVC增强**:包括路径...

    spring源码

    `@Async` 注解标记的方法会在后台线程执行。 8. **Spring Cloud** - 提供了一套微服务解决方案,包括服务发现(Eureka)、配置中心(Config Server)、熔断机制(Hystrix)等。 通过深入学习 Spring 源码,开发者...

    quartz单机和WEB应用

    集成Quartz到Web应用中,可以使用Spring框架的Quartz支持,通过Spring的Bean管理来简化配置和任务的声明。此外,还可以利用Spring的AOP(面向切面编程)特性,为任务添加事务管理、日志记录等功能。 标签中的“源码...

    spring-framework-3.0.0.RC3-with-docs.zip

    主要分为以下模块:Core Container(核心容器),包括Beans、Context、Core和SpEL(Spring Expression Language);Data Access/Integration,涵盖JDBC、ORM、OXM、JMS和Tx(事务管理);Web,如MVC、WebSocket和...

    springboot+netty+mybatis+sqlserver

    这意味着在调用这个方法时,控制权会立即返回给调用者,而方法的实际执行会在后台线程中完成。这样可以提高系统响应速度,尤其在处理耗时任务时。 综上所述,这个项目是一个综合性的系统,融合了Spring Boot的便捷...

    《java学习》-Java web开发async机制学习.zip

    Spring MVC提供了对Servlet 3.0异步处理的封装,通过`@Async`注解标记在方法上,表示这个方法将在后台线程中执行。`@Async`方法所在的类需要配置为`@EnableAsync`的bean,这样Spring会自动创建一个TaskExecutor来...

    Java+Web程序开发范例宝典

    书中可能涵盖JSF组件库的使用,以及与后台bean的交互。 4. **Spring框架**:Spring是Java企业级应用的事实标准,提供了依赖注入、AOP(面向切面编程)、事务管理等功能。书中会详细讲解Spring MVC的使用,以及如何...

    spring-framework-3.2.2.RELEASE

    - **Asynchronous Processing**:Spring 3.2引入异步处理,允许在后台线程执行耗时操作。 Spring Framework 3.2.2.RELEASE是一个稳定且广泛使用的版本,它不仅包含了上述的诸多特性,还修复了许多已知问题,提升了...

    SpringMVC+Spring+Hibernate4框架整合

    1. **Bean**:Spring管理的对象,由Spring容器创建、配置和管理。 2. **@Component、@Service、@Repository、@Controller**:这些注解用于标记不同层的Bean。 3. **@Autowired**:自动装配Bean的依赖。 4. **XML配置...

    SpringMVC+Mybatis后台管理系统开发源码(可以直接运行)

    SpringMVC和Mybatis是Java Web开发中的两大核心技术,常被组合使用构建高效、灵活的后台管理系统。本项目以"SpringMVC+Mybatis后台管理系统开发源码"为题,提供了一个可以直接运行的系统,非常适合有经验的开发者...

    JAVA-WEB复习题纲

    37. 通常,Web容器中只有一份Servlet实例,通过线程处理并发请求。 38. Java Servlet API包括javax.servlet和javax.servlet.http包,前者包含Servlet和Filter接口,后者包含HttpServletRequest和...

    Spring MVC面试宝典1.pdf

    ### Spring MVC面试宝典知识点详解 #### 一、SpringMVC简介 ##### 1.1 什么是SpringMVC? SpringMVC是一个基于Java...它可以用来管理整个Web应用的生命周期,并且可以与Servlet容器集成,提供对Web相关的Bean的支持。

Global site tag (gtag.js) - Google Analytics