自动装配应用程序上下文

2024-01-05

我正在尝试自动装配WebApplicationContext进入一个班级ImageCreatorUtil这是我在 Spring MVC 项目中创建的。在类中执行使用应用程序上下文的方法时,我总是收到 NPE。需要注意的是,该方法是由ApplicationListener在另一个配置文件中定义。我不确定为什么自动装配不起作用。有人可以提供任何建议吗?

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <!-- DispatcherServlet Context: defines this servlet's request-processing 
        infrastructure -->

    <!-- Enables the Spring MVC @Controller programming model -->
    <mvc:annotation-driven>
        <mvc:argument-resolvers>
            <bean class="org.springframework.data.web.PageableArgumentResolver" />
        </mvc:argument-resolvers>
    </mvc:annotation-driven>

    <!-- Intercept request to blog to add paging params -->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/blog/**"/>
            <bean class="org.tothought.spring.interceptors.PageableRequestHandlerInterceptor" />
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="org.tothought.spring.interceptors.LookupHandlerInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving 
        up static resources in the ${webappRoot}/resources directory -->
    <mvc:resources location="/resources/" mapping="/resources/**" />

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources 
        in the /WEB-INF/views directory -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="5000000"/>
    </bean>

    <context:component-scan base-package="org.tothought.spring.**" />

</beans>

ImageCreatorUtil.java

@Component
public class ImageCreatorUtil {

    static Logger logger = LoggerFactory.getLogger(ImageCreatorUtil.class);
    static final String IMAGE_PATH_FRAGMENT = "/resources/images/resume/skills/uploaded-icons/";

    @Autowired
    private WebApplicationContext context;

    /**
     * Creates the provided file in the resources directory for access by the
     * web application.
     * 
     * @param appContext
     * @param image
     */
    public void storeImage(Image image) {
        if (image != null) {
            String realPath = ((WebApplicationContext)context).getServletContext().getRealPath("/");
            File tmpFile = new File(realPath + IMAGE_PATH_FRAGMENT + image.getName());

            try {
                logger.info("Saving image to :" + tmpFile.getAbsolutePath());
                FileUtils.writeByteArrayToFile(tmpFile, image.getFile());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

应用程序上下文.xml

<?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:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <context:property-placeholder location="classpath:META-INF/db/db.properties" />
    <context:annotation-config/>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/to_thought" />
        <property name="username" value="${db.user}" />
        <property name="password" value="${db.password}" />
    </bean>

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="persistenceUnitName" value="toThought" />
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <jpa:repositories base-package="org.tothought.repositories"/>

    <!-- Application Listeners -->
    <bean id="lookupLoader" class="org.tothought.spring.listeners.LookupLoaderApplicationListener" /> 
    <bean id="imageLoader" class="org.tothought.spring.listeners.ImageLoaderApplicationListener" /> 
</beans>

控制台错误

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.NullPointerException
    at org.tothought.spring.utilities.ImageCreatorUtil.storeImage(ImageCreatorUtil.java:34)
    at org.tothought.spring.listeners.ImageLoaderApplicationListener.onApplicationEvent(ImageLoaderApplicationListener.java:29)
    at org.tothought.spring.listeners.ImageLoaderApplicationListener.onApplicationEvent(ImageLoaderApplicationListener.java:1)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:324)

我已经尝试过你的代码。上下文自动装配适用于任何控制器类中的上下文,但当我使用类的对象调用方法时,它不起作用。所以如果你做类似的事情:

您的控制器:

@Autowired
private ImageCreatorUtil icu;

public String controllerMethod(....) {
    icu.storeImage();
}

您的 application-context.xml :

<bean id="icu" class="****.controller.ImageCreatorUtil"/>

然后自动装配就可以正常工作了。我会尝试向您更新这种行为的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动装配应用程序上下文 的相关文章

  • 编译错误:Android Studio

    我正在尝试修改基于 IntelliJ 构建的现有 Android 项目 我已经搜索并尝试了很多东西 但我的错误仍然没有消失 Error 5 1 android apt compiler main D android tinynote app
  • Windows 上的虚假唤醒。是否可以?

    我最近学习了 虚假唤醒 有人说这个问题只可能发生在某些类型的 Linux PC 上 我用的是窗户 我为虚假唤醒编写了测试 我得到的结果是这是可能的 但我想向您展示这个测试 也许我在某个地方犯了错误 我的初始变体 import java ut
  • 模拟框架对我有什么作用?

    我听说有些我无法交谈的人是 jmock 的忠实粉丝 我已经做了以测试为中心的开发多年 所以我浏览了网站并查看了一些文档 但仍然不知道它有什么好处 我对春天也有同样的问题 如果您已经了解它是什么 他们的文档会很好地解释它 所以我并不认为 jm
  • Android 上的 setTimeOut() 相当于什么?

    我需要等效的代码setTimeOut call function milliseconds 对于安卓 setTimeOut call function milliseconds 您可能想查看定时任务 http developer andro
  • JSP重定向和传值

    我有一个 JSP 其中我重定向到另一个 jsp 例如 我在该jsp中没有任何其他数据 我想将值从该jsp index jsp 传递到重定向jsp login jsp 我将如何做到这一点 这里的 logonInput 是在struts con
  • lombok - 多个镜头中的 @Builder 模式

    I use Builder of 龙目岛项目 https github com rzwitserloot lombok 所以考虑我有这个例子 Builder public class Client private Getter Setter
  • JTable AutoCreateRowSorter 将数字排序为字符串

    我有一个 JTable JTable table new JTable String colNames c1 DefaultTableModel model new DefaultTableModel Integer x new Integ
  • C# 中的 Culture 相当于 Java 中的 Locale 吗?

    C 使用文化的概念 这在操作上与 Java 中的 Locale 类似吗 或者底层概念是否存在显着差异 从文化而不是语言环境的角度进行工作是一种寻找正确抽象层次的尝试 从以类似方式做事的人群的角度来考虑事物 而不是谈论地理区域和语言 并有点疯
  • 带有 spring-kafka 的 Kafka 死信队列 (DLQ)

    最好的实施方式是什么死信队列 DLQ Spring Boot 2 0 应用程序中的概念 使用 spring kafka 2 1 x 来处理无法处理的所有消息 KafkaListener某些bean发送到某些预定义的Kafka DLQ主题的方
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • 从外部 clojar 导入/使用资源

    我想做的是将一个大文件 MIDI 声音字体 打包到一个独立的 Maven repo clojar 中 然后能够以编程方式将其拉下来并从单独的项目中使用它 事实证明 这个看似简单的任务比我想象的要复杂 理想的情况是 如果有一种方法可以直接访问
  • 如何对JConsole的密码文件的密码进行加密

    我正在使用 JConsole 访问我的应用程序 MBean 并使用 password properties 文件 但根据 Sun 的规范 该文件仅包含明文格式的密码 com sun management jmxremote password
  • 如何在 Eclipse 中使用 Hibernate Tools 生成 DAO?

    我在用着 Eclipse Java EE IDE Web 开发人员 版本 Indigo 发布 使用 hibernate 工具 我对 Eclipse 中的 hibernate 很陌生 所以我学习如何配置 hibernate 并使用注释生成 P
  • ObservableList 不更新 ArrayList

    对于学校作业 我们正在使用 JavaFX 中的 ObservableList 对象 对吗 我已经为此工作了一天多了 但无法弄清楚 老师只告诉我们 谷歌一下 所以这也没有帮助 基本上 我们正在开发一个基本的管理应用程序来跟踪人们及其家人 人们
  • 在java中设置Process对象的安全性

    有人可以告诉我如何限制通过进程对象访问系统属性吗 如果我通过进程对象运行以下代码 我可以抛出安全异常吗 System getProperty user home 请告诉我如何为流程对象配置证券 在ProcessBuilder类文档中 环境方
  • 何时以及为何使用缓冲输入和输出流? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我读到这些是为了减少磁盘 网络调用开销而使用的 这在写操作的情况下似乎很好 但是进行缓冲读取有什么好处呢 如果您按字节读取文件 则每次都会进
  • 用于将字符串与通配符模式进行匹配的递归函数

    所以我一整天都在试图解决这个作业 只是无法完成 以下函数接受 2 个字符串 第二个 不是第一个 可能包含 的 星号 An 是字符串的替换 空 1个字符或更多 它可以出现 仅在s2中 一次 两次 更多或根本不出现 它不能与另一个相邻 ab c
  • 跳过一行GridBagLayout

    我在 JFrame 上使用 GridBagLayout 我希望能够跳过一两行 但将这些行显示为空白 然后在这些行后面有一个按钮 我在文档中找不到任何方法来执行我所描述的操作 有谁知道我可以执行此操作的任何方法吗 发现它比添加空组件干净得多
  • 1° 夏令时 Java 和 JS 表现出不同的行为

    假设巴西利亚 GMT 0300 夏令时于 21 10 2012 00 00 00 此时时钟应提前一小时 Java new Date 2012 1900 9 21 0 0 0 Sun Oct 21 01 00 00 BRST 2012 Chr
  • gwt - 在 RPC 调用中使用 List

    我有一个 RPC 服务 方法如下 public List

随机推荐

  • Python,向目录字符串添加尾部斜杠,操作系统独立

    如何添加尾部斜杠 对于 nix 对于 win32 到目录字符串 如果尾部斜杠尚未存在 谢谢 os path join path 如果尾部斜杠尚不存在 则会添加尾部斜杠 你可以做os path join path or os path joi
  • 如何在代码中访问x:Name-property?

    我将 XAML 文件中的 x Name 分配给了一个可以触发 MouseDown 事件的对象 在这种情况下 我想再次获取发件人的 x name attribute 我怎么做 该对象看起来像这样
  • float 的访问说明符的行为不符合预期

    include
  • 即使经过 360 度后如何获得以度为单位的相对旋转

    如果我有一个旋转的圆 并且达到 360 度的两倍 我会得到 720 度 但是当我旋转到 360 或 720 时 结果会给我 0 度 但我需要相对度数 所以如果圆旋转到 360 度 结果应该是 360 度而不是 0 是否有公式或函数可以在经过
  • Google Slides API - 如何更改特定颜色的所有形状的文本颜色

    我有 11 个文件 每个文件有 140 多张幻灯片 并且没有一个形状与主题 母版相关联 我的目标是更改主字体 并用黑色文本替换所有红色文本 有很多红色文本 我成功更新了主字体 感谢https gist github com dsottima
  • Java - 在一个映射中交换值和键?

    我正在为我的编程课制作一个加密和解密程序 但是我比小组领先一年 所以我想我可以利用去年学到的东西来简化事情 我决定使用树状图 该程序的作用是接收一个文件 读取包含字母编码方式的加密数据的第一行 它的格式为 A gt B B gt C C g
  • Flash 不支持 URL 中的用户名/密码吗?我有什么选择?

    我一直在尝试从开头带有用户名 密码的 URL 加载一些 JSON 所以 URL 类似于 http 用户名 电子邮件受保护 api 配置文件 http username password www myaddress org uk api pr
  • 属性编辑器设计模式?

    Warning 这是超级深入的 我理解 如果你根本不想读这篇文章 这主要是为了我整理一下我的思维过程 好的 这就是我想做的 我有这些对象 当您单击一个 或选择多个 时 它应该在右侧显示它们的属性 如图所示 当您编辑所述属性时 它应该立即更新
  • subclipse:无法加载默认 SVN 客户端

    使用 eclispe 和 subclipse 插件时 我不断收到此错误 Unable to load default SVN Client 我已经安装了 SVNKit 和 JavaHL 提供程序 但在首选项中找不到它 我正在使用 eclip
  • Amazon SES 中的特殊字符

    我正在使用适用于 PHP 的 AWS 开发工具包 https github com aws aws sdk php https github com aws aws sdk php 使用 Amazon SES 发送电子邮件 这是代码
  • 我们如何使用 C++ Lib Function 或 Windows API 在一个会话中执行多个 cmd 命令?

    在 C 中运行 cmd 命令之前 我想设置一些临时环境变量 该变量会在命令行会话结束时被删除 例如在执行下面的cmd命令之前 我想设置P4PASSWD强制环境变量 sprintf s p4Command 500 C p4 exe print
  • 将切片作为函数参数传递,并修改原始切片

    我知道 Go 中的所有内容都是按值传递的 这意味着如果我给一个函数一个切片 并且该函数使用内置函数附加到该切片append函数 那么原始切片将不会具有附加到函数范围内的值 例如 nums int 1 2 3 func addToNumbs
  • Google 地图 API 2 MapView 未更新

    我在 Android 应用程序中显示 Google Maps API v2 MapView 但奇怪的是它没有以一致的方式正确更新 我正在使用 GPS 更新地图位置 尝试了 LocationManager 和 LocationClient 尽
  • 早期返回与嵌套正 if 语句

    这是一些假设的代码示例 if e KeyCode Keys Enter if this CurrentElement null return false if this CurrentElement this MasterElement r
  • 视频标签中的 YouTube URL

    我正在使用
  • 用于 WorkItemAttribute?

    我注意到 Visual Studio 测试中有一个属性 Microsoft VisualStudio TestTools UnitTesting WorkItemAttribute 可用 我正在使用 VS 2010 Premium 和 TF
  • 为什么在Java算术中,上溢或下溢永远不会抛出异常?

    在Java算术运算期间 JVM不会抛出下溢或溢出异常 很多时候我们会遇到意想不到的结果 并想知道哪里出了问题 而在 NET 技术的情况下 我们有溢出和下溢异常 所以我的问题是 为什么Java被设计成在算术运算期间不抛出这个异常 这可能是多种
  • 如何将 before_filter 应用于 Rails 3.2.11 中每个控制器的每个操作?

    我想验证用户是否在对服务器的每个请求中登录 就像是 before filter verify logged in 我应该将 before filter 放在哪里 以便它适用于所有控制器操作和所有请求 要确保过滤器适用于所有操作 请将其放置在
  • Android JQuery focus() 解决方法

    我正在开发一个 HTML5 移动应用程序 使用常规 jQuery 而不是移动应用程序 它实现了出现在文本区域下方的自定义自动完成列表 用户从列表中选择一个选项 该单词将自动完成 然后用户照常继续输入 问题在于 用户点击文本框外部以从自动完成
  • 自动装配应用程序上下文

    我正在尝试自动装配WebApplicationContext进入一个班级ImageCreatorUtil这是我在 Spring MVC 项目中创建的 在类中执行使用应用程序上下文的方法时 我总是收到 NPE 需要注意的是 该方法是由Appl