常用的5种获取spring 中bean的方式总结:
方法一:在初始化时保存ApplicationContext对象
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:META-INF/spring/applicationContext.xml");
String[] configs = { "file:src/springConfig/springMVC.xml" };
XmlWebApplicationContext context = new XmlWebApplicationContext();
context.setConfigLocations(configs);
说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。
方法二:通过Spring提供的工具类获取ApplicationContext对象
import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
ac2.getBean("beanId");
说明:这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。
方法三:继承自抽象类ApplicationObjectSupport
说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
方法四:继承自抽象类WebApplicationObjectSupport
说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
方法五:实现接口ApplicationContextAware
说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext对象注入。
方法六:实现接口BeanFactoryAware
说明:实现该接口的setBeanFactory(BeanFactory beanFactory)方法,并保存BeanFactory对象。Spring初始化时,会通过该方法将 BeanFactory 对象注入。
虽然,spring提供了后三种方法可以实现在普通的类中继承或实现相应的类或接口来获取spring 的ApplicationContext对象,但是在使用是一定要注意实现了这些类或接口的普通java类一定要在Spring 的配置文件application-context.xml文件中进行配置。否则获取的ApplicationContext对象将为null。
如下是我实现了ApplicationContextAware接口的例子:
package quartz.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class SpringConfigTool implements ApplicationContextAware{//extends ApplicationObjectSupport{ private static ApplicationContext context = null; private static SpringConfigTool stools = null; public synchronized static SpringConfigTool init(){ if(stools == null){ stools = new SpringConfigTool(); } return stools; } public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } public synchronized static Object getBean(String beanName) { return context.getBean(beanName); } }
XML文件中的配置信息:
<bean id="SpringConfigTool" class="quartz.util.SpringConfigTool"></bean>
方法七:最后提供一种不依赖于servlet,不需要注入的方式
注意一点,在服务器启动时,Spring容器初始化时,不能通过以下方法获取Spring 容器,如需细节可以观看源码org.springframework.web.context.ContextLoader
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
wac.getBean(beanID);
方法八:通过HttpServletRequest request对象获取
WebApplicationContext webApplicationContent = RequestContextUtils.getWebApplicationContext(request);
相关推荐
java *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取...
基于接口、抽象类实现不停机动态调整代码的目的,将修改后的源码文件放置于指定目录下,读取文件后执行动态编译方法,即可将该类重新加载,新的类可以在Spring容器从新注册,且仅在当前窗口生效。如果重启了服务或...
然而,在某些情况下,我们可能需要在非Spring注解的类中访问Spring容器中的Bean,或者在这些类中使用YAML配置文件中的配置信息。本篇将详细介绍如何在这样的场景下实现这一目标。 首先,让我们来理解如何在非Spring...
### 获取Spring容器的方法详解 在Java开发中,Spring框架因其强大的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect Oriented Programming, AOP)功能而被广泛使用。掌握如何获取Spring容器对于管理和...
3. **Java配置类**:使用纯Java的方式配置Spring容器,这种方式更加灵活。 #### 三、通过编码手动获取Spring容器中的对象 在某些情况下,我们可能需要通过编程的方式来获取Spring容器中的Bean。例如,在非Spring...
6. 添加获取Bean实例的方法,模拟Spring容器的getBean功能。 在标签中提到了“源码”和“工具”,这意味着博客可能会深入到Spring框架的源码层面,分析其内部实现机制,同时也可能介绍了一些辅助开发的工具,比如...
在Java开发中,Spring容器(也称为ApplicationContext或BeanFactory)扮演着重要角色,它通过控制反转(Inversion of Control, IOC)和依赖注入(Dependency Injection, DI)的概念,帮助开发者构建松散耦合的系统。...
Spring容器的实现涉及到`DefaultListableBeanFactory`、`BeanDefinition`、`BeanPostProcessor`等多个类。在`MySpring`文件中,我们可能能看到类似的自定义实现: - `MyBeanFactory`:模拟`BeanFactory`,负责解析...
本实例将带你深入理解Spring容器的基本使用,通过实际操作来帮助你快速上手。 1. **Spring容器概述** Spring容器是Spring框架的核心,负责管理对象的生命周期和依赖关系。主要有两种类型的容器:BeanFactory和...
在上面的代码中,我们在SpringBoot启动类中对BeanUtil的容器进行赋值,这样我们就可以在普通类中使用BeanUtil来获取Spring容器中的Bean。 例如,如果我们想要获取一个FileUploadUtil Bean,可以使用以下代码: ```...
"深度解析spring容器管理bean"这一主题,旨在深入理解Spring如何通过反射机制、依赖注入(DI)以及XML或Java配置来实现对Bean的生命周期管理。 首先,Spring容器主要有两种类型:DefaultListableBeanFactory和...
- 避免过度使用`getBean()`:频繁使用`getBean()`可能导致代码过于紧密地耦合于Spring容器,降低代码的可读性和可测试性。 总结,Spring框架通过BeanFactory和ApplicationContext提供了灵活的方式来管理和获取Bean...
通过这种方式,Spring容器中的`userService` bean将是动态代理对象,当调用其方法时,会先执行我们在`invoke()`方法中定义的逻辑,包括服务降级处理和注解信息的获取。 总结来说,动态代理在Spring中提供了灵活的...
在Java Spring框架中,Spring IoC(Inversion of Control,控制反转)是核心特性之一,它使得应用程序的组件之间的依赖关系不再由代码直接管理,而是交由Spring IoC容器负责。这种设计模式降低了代码间的耦合,提高...
在本案例中,我们将探讨如何实现一个动态代理接口并将其注册到Spring容器,以便于通过@Autowired注解或其他方式在Spring应用中使用。 首先,我们需要定义一个接口,例如`MyService`,这个接口包含了我们需要代理的...
然后,创建一个 Java 类(HelloWorld.java),用于实现业务逻辑: ```java package com.example; public class HelloWorld { private String message; public void setMessage(String message) { this.message...
Spring容器会根据`Conf`类中的`@Bean`注解来创建bean,然后我们可以通过bean的类型从容器中获取对象并调用其方法。 值得注意的是,`AnnotationConfigApplicationContext`可以接受多个类作为输入,这些类可以是`@...
在了解Spring框架时,我们经常会遇到如何让一个Bean获取Spring容器的问题。Spring提供了依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)的机制,通过这些机制,Spring可以...
本文将深入探讨如何在Java中获取Spring容器中的Bean,并通过具体的示例来讲解这一过程。 ### Spring框架概述 Spring框架是由Rod Johnson创建的一个开源项目,旨在简化Java企业级应用程序的开发。Spring的核心特性...
6. **反射API**: 动态加载类、获取类信息、创建对象及调用方法。 7. **JVM**: 类加载机制、内存模型、垃圾回收、性能优化。 **Spring框架** 1. **依赖注入(DI)**: 通过容器管理对象之间的依赖关系,减少代码间的...