为了账号安全,请及时绑定邮箱和手机立即绑定

ApplicationContextAware方式获取上下文,但是最终却报错:NullPointer

ApplicationContextAware方式获取上下文,但是最终却报错:NullPointer

慕无忌1623718 2019-03-21 18:14:01
1.今天想使用ApplicationContextAware接口方式去获取上下文环境,从而去获取bean,自己照着例子去写了一遍,但是最后还是报错,找不到这个bean,貌似实现了ApplicationContextAware的这个类根本就没有被Spring初始化的时候初始化执行setApplicationContext()方法(我已经在配置文件配置了这个bean),下面是我的代码:2.工程代码(1)web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xmlns="http://java.sun.com/xml/ns/javaee"         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>spring-test</display-name>  <!-- spring config begin -->  <context-param>    <param-name>contextConfigLocation</param-name>    <param-value>      classpath*:config/spring/local/appcontext-*.xml    </param-value>  </context-param>  <!-- end -->  <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>(2).spring配置文件,我用的是idea,配置文件在config/spring/local下,Resource下面<?xml version="1.0" encoding="utf-8" ?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd                            "> HelloWorld的代码我就不贴了,就是一个简单的JavaBean,有个message:String属性我理解的初始化顺序是这样的:启动tomcat容器,加载web.xml,建立整个容器(Servlet容器,这里是tomcat吧)的上下文,ServletContext,这时web.xml有个监听器,就是ContextLoaderListener,监听到这个事件,就会去扫描spring配置文件,默认是applicationContext.xml文件(classpath,idea是Resource下),如果自定义,就应该如web.xml中的<context-param>标签那般配置,扫描这个指定的Spring配置文件,就会将文件中相应的bean加载,其中实现了ApplicationContextAware的bean类会去执行setApplicationContext()方法,将上下文自动初始化,但我这里并没有,根本就没有去执行这个方法,不知道配置哪里错了?
查看完整描述

8 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

ioc容器未初始化,先实例化一个ApplicationContext


查看完整回答
反对 回复 2019-04-23
?
开满天机

TA贡献1786条经验 获得超12个赞

 ApplicationContextAware这个中有getBean()方法,你为什么还要实现它,写自己的getBean()方法,直接用它的方法不行么?不理解。这么多代码,不就是说明了spring通过application context来获取java bean的么?

查看完整回答
反对 回复 2019-04-23
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

我前几天也遇到同样的问题,我的情况是在一个通过反射实例化的类里,用spring管理的实例,我也写了一个这样的类来获取spring实例,开始怎么都无法注入,后来我加了lazy-init="false"就可以了,我原来用spring3的时候都不用加,这次用的spring4,希望对你有帮助


查看完整回答
反对 回复 2019-04-23
?
九州编程

TA贡献1785条经验 获得超4个赞

看看自己依赖的其他人的包是不是也有同样的SpringBeanUtils,并且也配置了@Component或者xml


查看完整回答
反对 回复 2019-04-23
  • 8 回答
  • 0 关注
  • 4137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信