org.jboss.resteasy.plugins.spring
Class SpringBeanProcessor

java.lang.Object
  extended by org.jboss.resteasy.plugins.spring.SpringBeanProcessor
All Implemented Interfaces:
EventListener, org.springframework.beans.factory.config.BeanFactoryPostProcessor, org.springframework.context.ApplicationListener, org.springframework.context.event.SmartApplicationListener, org.springframework.core.Ordered
Direct Known Subclasses:
SpringBeanProcessorServletAware

public class SpringBeanProcessor
extends Object
implements org.springframework.beans.factory.config.BeanFactoryPostProcessor, org.springframework.context.event.SmartApplicationListener

The processor will register any bean annotated with @Path or @Provider into the Resteasy framework.

It also sets up Registry and ResteasyProviderFactory to be autowirable via @Autowire in Controllers/service layers.

There's quite a bit of spring integration functionality under the covers:

  1. @Providers, such as RESTEasy interceptors and String converters have to be registered in RESTEasy before resources and registers. That gets a bit tricky, so depends-on functionality is used as well

This class takes advantaage of quite a few Spring

Version:
$Revision: 1 $
Author:
Bill Burke, Bill Burke

Nested Class Summary
protected  class SpringBeanProcessor.ResteasyBeanPostProcessor
           
 
Field Summary
protected  Dispatcher dispatcher
           
protected  ResteasyProviderFactory providerFactory
           
protected  Set<String> providerNames
           
protected  Registry registry
           
protected  Map<String,SpringResourceFactory> resourceFactories
           
 
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
 
Constructor Summary
SpringBeanProcessor()
           
SpringBeanProcessor(Dispatcher dispatcher)
           
SpringBeanProcessor(Dispatcher dispatcher, Registry registry, ResteasyProviderFactory providerFactory)
           
 
Method Summary
 Dispatcher getDispatcher()
           
 int getOrder()
           
 ResteasyProviderFactory getProviderFactory()
           
 Registry getRegistry()
           
 void onApplicationEvent(org.springframework.context.ApplicationEvent event)
          Register all of the resources into RESTEasy only when Spring finishes it's life-cycle and the spring singleton bean creation is completed
 void postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
           This method keeps track of @Provider and resources for future use.
protected  Class<?> processBean(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory, List<String> dependsOnProviders, String name, org.springframework.beans.factory.config.BeanDefinition beanDef)
          process a single @Provider or a single resource.
 void setDispatcher(Dispatcher dispatcher)
           
 void setOrder(int order)
           
 void setProviderFactory(ResteasyProviderFactory providerFactory)
           
 void setRegistry(Registry registry)
           
 boolean supportsEventType(Class<? extends org.springframework.context.ApplicationEvent> eventType)
           
 boolean supportsSourceType(Class<?> sourceType)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

registry

protected Registry registry

providerFactory

protected ResteasyProviderFactory providerFactory

dispatcher

protected Dispatcher dispatcher

resourceFactories

protected Map<String,SpringResourceFactory> resourceFactories

providerNames

protected Set<String> providerNames
Constructor Detail

SpringBeanProcessor

public SpringBeanProcessor(Dispatcher dispatcher)

SpringBeanProcessor

public SpringBeanProcessor(Dispatcher dispatcher,
                           Registry registry,
                           ResteasyProviderFactory providerFactory)

SpringBeanProcessor

public SpringBeanProcessor()
Method Detail

getRegistry

public Registry getRegistry()

setRegistry

public void setRegistry(Registry registry)

getProviderFactory

public ResteasyProviderFactory getProviderFactory()

setProviderFactory

public void setProviderFactory(ResteasyProviderFactory providerFactory)

getDispatcher

public Dispatcher getDispatcher()

setDispatcher

public void setDispatcher(Dispatcher dispatcher)

postProcessBeanFactory

public void postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
                            throws org.springframework.beans.BeansException

This method keeps track of @Provider and resources for future use. It also registers the RESTEasy Registry, ProviderFactry, and Dispatcher for @Autowire injection.

Beyond tracking, this will ensure that non-MessageBody(Reader|Writer) @Providers are created by Spring before any resources by having the resources "depends-on" the @Providers.

Specified by:
postProcessBeanFactory in interface org.springframework.beans.factory.config.BeanFactoryPostProcessor
Throws:
org.springframework.beans.BeansException

processBean

protected Class<?> processBean(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory,
                               List<String> dependsOnProviders,
                               String name,
                               org.springframework.beans.factory.config.BeanDefinition beanDef)
process a single @Provider or a single resource.


onApplicationEvent

public void onApplicationEvent(org.springframework.context.ApplicationEvent event)
Register all of the resources into RESTEasy only when Spring finishes it's life-cycle and the spring singleton bean creation is completed

Specified by:
onApplicationEvent in interface org.springframework.context.ApplicationListener

getOrder

public int getOrder()
Specified by:
getOrder in interface org.springframework.core.Ordered

setOrder

public void setOrder(int order)

supportsEventType

public boolean supportsEventType(Class<? extends org.springframework.context.ApplicationEvent> eventType)
Specified by:
supportsEventType in interface org.springframework.context.event.SmartApplicationListener

supportsSourceType

public boolean supportsSourceType(Class<?> sourceType)
Specified by:
supportsSourceType in interface org.springframework.context.event.SmartApplicationListener


Copyright © 2011. All Rights Reserved.