Repository: cxf Updated Branches: refs/heads/master ec98e18c8 -> 2b2f97fe1
[CXF-6121] Optimizing a bit SpringResourceFactory Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/cba91b8f Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/cba91b8f Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/cba91b8f Branch: refs/heads/master Commit: cba91b8f1b4c207c35d8c3d49eed66d274aaa28f Parents: b0ba2d1 Author: Sergey Beryozkin <sberyoz...@talend.com> Authored: Wed Dec 3 17:01:00 2014 +0000 Committer: Sergey Beryozkin <sberyoz...@talend.com> Committed: Wed Dec 3 17:01:00 2014 +0000 ---------------------------------------------------------------------- .../cxf/jaxrs/spring/SpringResourceFactory.java | 28 ++++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/cba91b8f/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/SpringResourceFactory.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/SpringResourceFactory.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/SpringResourceFactory.java index 99f496c..826f619 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/SpringResourceFactory.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/SpringResourceFactory.java @@ -54,6 +54,7 @@ public class SpringResourceFactory implements ResourceProvider, ApplicationConte private boolean callPreDestroy = true; private String postConstructMethodName; private String preDestroyMethodName; + private Object singletonInstance; public SpringResourceFactory() { @@ -78,21 +79,32 @@ public class SpringResourceFactory implements ResourceProvider, ApplicationConte isSingleton = ac.isSingleton(beanId); if (!isSingleton) { isPrototype = ac.isPrototype(beanId); + } else { + try { + singletonInstance = ac.getBean(beanId); + } catch (BeansException ex) { + // ignore for now, can be to do with no default constructor available + } } + } /** * {@inheritDoc} */ public Object getInstance(Message m) { - ProviderInfo<?> application = m == null ? null - : (ProviderInfo<?>)m.getExchange().getEndpoint().get(Application.class.getName()); - Map<Class<?>, Object> mapValues = CastUtils.cast(application == null ? null - : Collections.singletonMap(Application.class, application.getProvider())); - Object[] values = ResourceUtils.createConstructorArguments(c, m, !isSingleton(), mapValues); - Object instance = values.length > 0 ? ac.getBean(beanId, values) : ac.getBean(beanId); - initInstance(m, instance); - return instance; + if (singletonInstance != null) { + return singletonInstance; + } else { + ProviderInfo<?> application = m == null ? null + : (ProviderInfo<?>)m.getExchange().getEndpoint().get(Application.class.getName()); + Map<Class<?>, Object> mapValues = CastUtils.cast(application == null ? null + : Collections.singletonMap(Application.class, application.getProvider())); + Object[] values = ResourceUtils.createConstructorArguments(c, m, !isSingleton(), mapValues); + Object instance = values.length > 0 ? ac.getBean(beanId, values) : ac.getBean(beanId); + initInstance(m, instance); + return instance; + } } protected void initInstance(Message m, Object instance) {