这个问题困扰了我2天终于找到原因了,原来是少了在xml文件中的配置。
如下是在网上找到的5中获取spring 中bean的方式总结:
方法一:在初始化时保存ApplicationContext对象
代码:
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");
说明:这种方式适用于采用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对象注入。
虽然,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>
分享到:
相关推荐
这里我们将详细探讨如何在Java中通过Spring获取配置的bean。 1. **BeanFactory与ApplicationContext** - **BeanFactory** 是Spring中最基础的IoC容器,负责管理和实例化Bean。它允许开发者定义Bean的生命周期和...
我们可以创建一个配置类,然后在其中声明bean,使用`@ComponentScan`扫描包含普通类的包,这样Spring就能自动管理普通类。同时,也可以在配置类中使用`@Bean`注解创建bean实例,然后在普通类中通过`@Autowired`注入...
然而,在某些情况下,我们可能需要在非Spring注解的类中访问Spring容器中的Bean,或者在这些类中使用YAML配置文件中的配置信息。本篇将详细介绍如何在这样的场景下实现这一目标。 首先,让我们来理解如何在非Spring...
在Java编程中,Spring框架是应用广泛的企业级开发工具,它提供了一种强大的依赖注入机制,使得开发者可以方便地管理并获取容器中的Bean。本文将详细介绍在Spring框架中获取配置Bean的三种主要方法。 1. **通过...
### Spring的Bean配置详解 #### 一、Spring配置文件根元素`<beans>`解析 - **功能概述**:`<beans>`是Spring配置文件的根元素,用来包含一个或多个`<bean>`元素,用于定义Spring容器管理的各种Bean。 #### 二、`...
在Spring Boot框架中,普通类调用bean是常见的操作,特别是在构建复杂应用时。这篇博客“17. Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中...
总的来说,获取非Spring管理组件中的SpringBean主要有两种方式:一是通过实现`ApplicationContextAware`接口并存储ApplicationContext,二是使用注解和静态内部类来注入BeanFactory。这两种方法都是Spring框架提供的...
`<bean>`元素用于告诉Spring容器一个类及其配置方式。它包含了以下关键属性: - **class属性**:表示JavaBean的全限定类名。例如,`com.example.MyClass`。这是Spring创建Bean实例的基础。 - **id属性**:是Bean...
首先,Spring的注解主要分为三类:配置注解(如@Configuration)、元数据注解(如@Component、@Service、@Repository和@Controller)和注入注解(如@Autowired、@Value)。这些注解使得我们可以在不编写XML配置的...
对于一些复杂的项目来说,可能会涉及到多个不同的Spring配置文件,这时可以考虑封装一个自定义工具类来统一处理Bean的获取逻辑,例如题目中提到的`ApplicationContextUtil`: ```java import org.springframework....
3. **Java配置类**:Spring 3.0引入了Java配置,允许我们使用Java类来配置Bean。 ```java @Configuration public class AppConfig { @Bean public MyBean myBean() { return new MyBean(); } } ``` 这里的`@Bean...
1. Spring Boot工具类静态属性注入:使用@ConfigurationProperties注解将application.yml文件中的配置信息注入到Java类中。 2. 使用@Value注解将application.yml文件中的配置信息注入到Java类的成员变量中。 3. ...
以下是对Spring Bean配置的详细解释: 1. `<beans>` 根元素:这是Spring配置文件的起点,它包含了所有的Bean定义。Spring容器会解析这个文件并创建相应的Bean实例。 2. `<bean>` 元素:这是Spring配置中最常见的...
在Spring中,Bean的管理包含多个方面:创建Bean实例、配置Bean属性、控制Bean的生命周期以及Bean作用域的定义。接下来将详细解释这些知识点。 1. Spring的工厂类: Spring通过工厂模式设计了一系列工厂类来创建对象...
7. 示例代码演示了如何使用@Component注解来定义一个Spring管理的Bean,并且在测试类中通过Spring的ApplicationContext来获取该Bean,验证其是否被正确注册。 8. JSR-250和JSR-330的注解虽然被Spring支持,但它们并...
Bean在Spring中是核心组件,它代表了应用程序中的对象,可以通过配置文件、注解或者Java配置类进行定义。Bean的生命周期包括初始化、使用和销毁等阶段,Spring容器负责管理这些过程。Bean可以依赖注入其他Bean,使得...
或者,如果你更倾向于使用Java配置,可以在`java`目录下的配置类中声明Bean。 ```java @Configuration public class AppConfig { @Bean public MyService myService() { return new MyService(); } } ``` 然后...
从Spring 3.0开始,推荐使用Java配置类中的@Bean注解来指定初始化方法。 4. 销毁(Destruction) 销毁阶段发生在Spring容器关闭或Bean不再需要时。销毁之前会调用实现了DisposableBean接口的destroy方法或通过XML...
综上所述,Spring 的依赖注入和 Bean 管理不仅限于 Web 应用,也可以方便地应用于 Java Application 中,通过 XML 或注解配置来实现组件间的解耦,提高代码质量。这个示例项目 `test` 可能包含了实现上述功能的代码...
本文将深入探讨如何在Java程序中获取Spring框架中配置的bean。 首先,我们来理解一下Spring框架的基本概念。Spring是一个轻量级的框架,其核心特性包括控制反转(Inversion of Control, IoC)和面向切面编程...