【发布时间】:2013-10-18 14:52:24
【问题描述】:
我正在使用 spring 3.x 版本并使用注释来连接依赖项。我有两个豆子如下。
package com.sample.project.service;
@Component
public class MyAppender extends AppenderSkeleton{
//here trying to inject emailSender bean
@Autowired
private EmailSender emailSender;
//some code with emailSender
//emailSender.callSomeService...
}
上面的 bean 扩展了 log4j 的 AppenderSkeleton 类。
package com.sample.project.service;
@Component
public class EmailSender {
@Autowired
private SomeOtherBean someOther;
//somecode
}
我在 applicationContext.xml 中有一个条目,如下所示。
<context:component-scan base-package="com.sample.project.service" />
Log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<!-- Appenders -->
<appender name="stdout" class="com.sample.project.service.MyAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
</layout>
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="500"/>
<appender-ref ref="stdout"/>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ASYNC" />
</root>
</log4j:configuration>
但问题是,注入MyAppender 的emailSender 始终是null。
我在这里做错什么了吗。或者覆盖 log4jspecific 类并用 @Component 注释它们有什么问题吗?谢谢!请帮帮我!
【问题讨论】:
-
除非您自己创建
MyAppender对象,否则它不可能是null。 -
没有。我没有创建 MyAppender 对象。它已经用@Component注解了。
-
告诉我们你在哪里以及如何注射它。
-
MyAppender 已经用@Component 进行了注解。
-
好的,所以它在您的上下文中作为 bean 存在。你是怎么用的?
标签: java spring dependency-injection java-ee-6