我正在运行一个网络应用程序,它有一个公开的类(可供其他POJO类使用),并且有一个自动装配的私有成员。
Spring托管类
public class EPSQueueSender {
@Autowired
private AmqpTemplate epsMessageTemplate;
public void dosomething(...){
epsMessageTemplate.convertAndSend(...); // Here epsMessageTemplate is null if instance of EPSQueueSender taken from other POJO
}
}
POJO班
public class Test{
EPSQueueSender sender = new EPSQueueSender();
sender.dosomething(....); // gives null exception on epsMessageTemplate
}
Spring代码(作为WebApp运行)和POJO类代码(不同的Jar)在同一个JVM上。 POJO无法获得初始化的自动对象。但是,如果我在webApp项目中使用它,它将被初始化。
有人可以提出一些建议我如何克服这个问题? 我想尝试的最后一件事是将网络服务器作为来自POJO的http请求。
答案 0 :(得分:0)
答案 1 :(得分:0)
使用Spring的@Configurable功能可以解决您的问题。为此,您在xml中配置了像belove
这样的代码<context:annotation-config/>
<context:spring-configured/>
<context:load-time-weaver/>
在Java Congiguration中如下所示:
@Configuration
@EnableAspectJAutoProxy
@EnableSpringConfigured
@EnableLoadTimeWeaving
public class ConfigApplicationContext {
}
使用这种配置,你可以通过内置的Spring bean AnnotationBeanConfigureAspect来加载加载方面的技术,你可以在一个用@Configurable注释的pojo中注入Spring bean。你可以得到如下代码:
@Configurable
public class Test{
@Autowired
private EPSQueueSender sender;
public void method(){
sender.dosomething(....); // gives null exception on epsMessageTemplate
}
}
当然,既然您正在使用负载波技术,那么您已配置了将执行工具的代理。配置非常简单,你可以在jvm或tomcat的开头添加如下所示的行:
java -javaagent:带有agent / spring-instrument.jar的jar的路径
记住当然插入aop和spring aop maven依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>yourVersion</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>4
<version>yourVersion</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
<version>yourVersion</version>
</dependency>
我希望这可以帮到你