我正在学习Spring,我对如何在独立应用程序中使用它(以及在使用它来制作Web应用程序时)提出了一个问题。到目前为止我编写的示例使用了一个简单的main方法,我通过调用getBean来检索bean。上下文对象。但是,您可能希望在多个类中执行此操作,因此您首先获取上下文然后调用getBean还是有其他更清洁的替代方案?或者这是你在独立和网络应用程序中这样做的方式吗?
答案 0 :(得分:7)
如果你到处调用context.getBean()
,你可能会错过Spring的全部内容,这是一个依赖注入框架。
在独立应用程序中,您通常只调用context.getBean()
一次(或至少非常少),以获得“root”bean。这个bean由Spring和其他bean一起注入,依此类推。
在网络应用中,一切都取决于您使用的框架。但通常情况下,您在web.xml中注册一个监听器,为您加载上下文,并由Spring创建和/或注入控制器。
答案 1 :(得分:3)
你说的是正确的。您的主要方法将初步确定您发现的应用程序上下文。然后,技巧是使用该应用程序上下文来创建应用程序的入口点。那个用春天创造的豆子已经为你准备好了..
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();
}
}
答案 2 :(得分:1)
一个类(可能是你的主类)必须是Spring知识才能创建上下文。所有其他类可以继续通过Spring连接在一起,不需要上下文感知。
答案 3 :(得分:1)
这取决于您正在编写的应用程序,但您应该将getBean()
个调用限制为最小,最好是一个。您直接从上下文中获取第一个bean,并将其余的逻辑放在bean本身中。一些事情:
Bootstrap boot = context.getBean(Bootstrap.class);
boot.start();
所有其他应用程序逻辑都在start()
内进行。它可以创建线程,监听事件等。