在独立应用程序中使用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()
。 它可以创建线程,监听事件等。