Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Spring in standalone apps

I am learning Spring and I have a question regarding how you use it in standalone applications (and also when using it for making web applications). The examples I have been coded so far has used a simple main method where I retrieve beans by calling getBean on the. Context object. However, you probably want to do this in multiple classes so do you first get a context and then call getBean or are there other cleaner alternatives? Or is this the way you do it in standalone and web apps?

like image 744
LuckyLuke Avatar asked Dec 04 '25 22:12

LuckyLuke


2 Answers

If you're calling context.getBean() everywhere, you're probably missing the whole point of Spring, which is a dependency injection framework.

In a standalone app, you typically call context.getBean() only once (or at least, very rarely), in order to get a "root" bean. This bean is injected by Spring with other beans, and so on.

In a web app, it all depends on which framework you use. But typically, you register a listener in the web.xml which loads the context for you, and controllers are created and/or injected by Spring.

like image 94
JB Nizet Avatar answered Dec 07 '25 13:12

JB Nizet


You're on the right lines. Your main method will initialise your application context as you've discovered. The trick then is to use that app context to create the entry point to your application. That bean, having been created with spring will have been wired for you..

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();
    }

}
like image 42
sw1nn Avatar answered Dec 07 '25 12:12

sw1nn