Spring bean在主方法类中的注入



我有一个spring 3.0的web应用程序。我需要运行一个类与主方法从一个cron,使用在appcontext xml中定义的bean(使用组件扫描注释)。我有我的主类在同一个src目录。我如何从web上下文注入豆子到主要方法。我试着用

ApplicationContext context = new ClassPathXmlApplicationContext("appservlet.xml");

我试图使用AutoWired,它返回一个空bean。所以我使用了applicationctx,当我运行main方法时,这会创建一个新的上下文(如预期的那样)。但是我可以使用容器中的现有bean吗?

 @Autowired
 static DAO dao;
    public static void main(String[] args) {
                 ApplicationContext context = new ClassPathXmlApplicationContext("xman-         servlet.xml");
    TableClient client = context.getBean(TableClient.class);
    client.start(context);
}

不能将Spring bean注入到任何不是由Spring创建的对象中。另一种说法是:Spring只能注入到它所管理的对象中。

由于您正在创建上下文,因此需要为DAO对象调用getBean。

查看Spring Batch,它可能对你有用。

您可以在主应用程序中使用spring上下文,并重用与web应用程序相同的bean。你甚至可以重用一些Spring XML配置文件,只要它们不定义只在web应用上下文中有意义的bean(请求作用域、web控制器等)。

但是您将得到不同的实例,因为您将运行两个jvm。如果您真的想重用相同的bean实例,那么您的主类应该使用web服务或HttpInvoker远程调用web应用程序中bean的一些方法。

Try with this Main:

public class Main {
    public static void main(String[] args) {
        Main p = new Main();
        p.start(args);
    }
    @Autowired
    private MyBean myBean;
    private void start(String[] args) {
        ApplicationContext context = 
             new ClassPathXmlApplicationContext("classpath*:/META-INF/spring/applicationContext*.xml");
        System.out.println("The method of my Bean: " + myBean.getStr());
    }
}

And this Bean:

@Service 
public class MyBean {
    public String getStr() {
        return "mybean!";
    }
}

为了解决这个问题,我创建了https://jira.springsource.org/browse/SPR-9044。如果你喜欢建议的方法,请投赞成票。

Spring boot提供了一个官方的解决方案。从

下载框架https://start.spring.io/

,并确保pom.xml中的打包设置为jar。只要你不包含任何web依赖,应用程序将仍然是一个控制台应用程序。

相关内容

  • 没有找到相关文章

最新更新