在独立应用程序中使用Spring

我正在学习Spring,我对如何在独立应用程序中使用它(以及在使用它来制作Web应用程序时)提出了一个问题。 到目前为止我编写的示例使用了一个简单的main方法,我通过调用getBean来检索bean。 上下文对象。 但是,您可能希望在多个类中执行此操作,因此您首先获取上下文然后调用getBean还是有其他更清晰的替代方案? 或者这是你在独立和网络应用程序中这样做的方式?

如果你到处调用context.getBean() ,你可能会错过Spring的全部内容,这是一个dependency injection框架。

在独立应用程序中,通常只调用一次context.getBean() (或至少非常少),以获得“root”bean。 这个bean由Spring注入其他bean,依此类推。

在Web应用程序中,这一切都取决于您使用的框架。 但通常,您在web.xml中注册一个监听器,为您加载上下文,并由Spring创建和/或注入控制器。

你说的是正确的。 您的主要方法将初步确定您发现的应用程序上下文。 然后,技巧是使用该应用程序上下文来创建应用程序的入口点。 那个用spring创造的豆子已经为你准备好了..

 import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ApplicationMain { public static void main(String[] args) { AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/META-INF/spring/applicationContext.xml"); MyApplication app = BeanFactoryUtils.beanOfType(ctx, MyApplication.class); app.init(); } } 

一个类(可能是您的主类)必须是Spring知识才能创建上下文。 所有其他类可以继续通过Spring连接在一起,不需要上下文感知。

它取决于您正在编写的应用程序,但您应该将getBean()调用限制为最小,最好是一个。 您将直接从上下文中获取第一个bean,并将其余逻辑放在bean本身中。 一些事情:

 Bootstrap boot = context.getBean(Bootstrap.class); boot.start(); 

所有其他应用程序逻辑都在start() 。 它可以创建线程,监听事件等。