Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

is there an elegant way to inject a spring managed bean into a java custom/simple tag

I have a bunch of java custom tags that use spring managed beans.. since i cant find a way to inject into a custom tag, i created a helper class that provides static methods to "getTheObjectINeedBean()" for all the spring bean objects i need.. I do not like this approach at all.

i really want to be able to inject a spring managed bean into the custom tag

Is there a way? As far as my research goes, I understand there is no way to do this, because the custom tag is container managed

Thanks,

Billy

like image 475
Billworth Vandory Avatar asked Aug 10 '10 03:08

Billworth Vandory


1 Answers

You are correct there isn't a simple way to use dependency-injection in jstl tags, because they are not managed by spring, and cannot be. However there are (at least) two workarounds:

  • @Configurable - aspectJ allows you to plug a weaver at load-time/compile-time, so that even objects that are not instantiated by spring can be spring aware. See here

  • You can create a base tag class for your project, and call an init(..) method from every doStartTag(..) method. There, you can get the ServletContext from the pageContext, and thus obtain the spring ApplicationContext (via ApplicationContextUtils). Then:

    AutowireCapableBeanFactory factory = appCtx.getAutowireCapableBeanFactory();
    factory.autowireBean(this);
    

Neither options are perfect as they require either some additional code, or some "black magic"

like image 85
Bozho Avatar answered Oct 15 '22 01:10

Bozho