如何从POJO调用Spring托管对象?

时间:2016-05-07 10:27:16

标签: java spring pojo applicationcontext

我正在运行一个网络应用程序,它有一个公开的类(可供其他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请求。

2 个答案:

答案 0 :(得分:0)

beans可以是pojo或xml许多examples可能会有所帮助。您已经拥有@autowired,但是您没有创建属于使用@Configuration注释的类的@bean方法

答案 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>

我希望这可以帮到你