0
votes

My idea is to create a .jar file that contains Services

managed by Spring, that should be got by getBean()

I want to put it to WEB-INF/lib of a Web-app

Then in web-app Servlets I want to get use of the functionality of a Jar file.

1 Idea. Create classes that encapsulate invokation to Spring Context (getBean() etc) For example, the class I'll be using will simply get a parameter and return a parameter, but inside that class there'll be an invocation to Spring's getBean etc.

In this case, I suppose there'll be no problem in using those in Servlets through jar import. Only thing, what kind of context I should use inside .jar to get beans so that it worked after packing into jar? ApplicationContext or what?

2 Idea. Is there another simple solution how to pack into jar and then use Services in a non-managed by Spring environment?

2

2 Answers

2
votes

If you're calling getBean() on an ApplicationContext, I have to think that you're somewhat missing the point. Spring was invented to get rid of this exact problem. Spring works on the principle of dependency injection (inversion of control). That means you inject the services to where they're needed rather than you ask for them by name and if they are named, that naming is part of configuration not code.

There is no issue using classes from another jar as long as its part of the classpath. They're just loaded like any other class. Even if they're not in the class path you can use a ClassLoader if required to get them. Where it gets a bit more complicated is where the classes are in another JVM. Even that can be done but it sounds like its not the case here.

Where is this parameter you're talking about? I would strongly urge you to consider to binding named services to some context in a RESTful kind of way (something well-supported in Spring 3 MVC) rather than implementing some kind of registry or even explicit service location from a manually loaded context.

1
votes

There's a lot possibilities of doing that. To use Spring, you don't need EVERYTHING to be Spring.

For instance, you can configure Spring in your web.xml:

<web-app ...>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:com/acme/foo/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    ...
</web-app>

In your servlets you can do WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean("myBean") to access beans.

Depending on the environment there are other means for integration. For instance, you can use org.springframework.web.jsf.el.SpringBeanFacesELResolver in JSF. Here is an example of JSF application with Spring-managed beans.