1 package org
.argeo
.slc
.core
.execution
.xml
;
3 import org
.springframework
.aop
.scope
.ScopedProxyUtils
;
4 import org
.springframework
.beans
.factory
.config
.BeanDefinitionHolder
;
5 import org
.springframework
.beans
.factory
.parsing
.BeanComponentDefinition
;
6 import org
.springframework
.beans
.factory
.xml
.BeanDefinitionDecorator
;
7 import org
.springframework
.beans
.factory
.xml
.ParserContext
;
8 import org
.w3c
.dom
.Element
;
9 import org
.w3c
.dom
.Node
;
12 * Inspired by org.springframework.aop.config.ScopedProxyBeanDefinitionDecorator
14 public class ExecutionScopeDecorator
implements BeanDefinitionDecorator
{
15 private static final String PROXY_TARGET_CLASS
= "proxy-target-class";
17 public BeanDefinitionHolder
decorate(Node node
,
18 BeanDefinitionHolder definition
, ParserContext parserContext
) {
20 definition
.getBeanDefinition().setScope("execution");
22 // Default: CGLib not used
23 boolean proxyTargetClass
= false;
24 if (node
instanceof Element
) {
25 Element ele
= (Element
) node
;
26 if (ele
.hasAttribute(PROXY_TARGET_CLASS
)) {
27 proxyTargetClass
= Boolean
.valueOf(ele
.getAttribute(PROXY_TARGET_CLASS
)).booleanValue();
31 // Register the original bean definition as it will be referenced by the scoped proxy and is relevant for tooling (validation, navigation).
32 String targetBeanName
= ScopedProxyUtils
.getTargetBeanName(definition
.getBeanName());
33 parserContext
.getReaderContext().fireComponentRegistered(new BeanComponentDefinition(definition
.getBeanDefinition(), targetBeanName
));
35 return ScopedProxyUtils
.createScopedProxy(definition
, parserContext
.getRegistry(), proxyTargetClass
);