01: /*
02: * Copyright 2002-2007 the original author or authors.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16:
17: package org.springframework.aop.framework.autoproxy;
18:
19: import org.springframework.beans.factory.config.BeanDefinition;
20: import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
21: import org.springframework.core.Conventions;
22:
23: /**
24: * Utilities for auto-proxy aware components.
25: * Mainly for internal use within the framework.
26: *
27: * @author Juergen Hoeller
28: * @since 2.0.3
29: * @see AbstractAutoProxyCreator
30: */
31: public abstract class AutoProxyUtils {
32:
33: /**
34: * Bean definition attribute that may indicate whether a given bean is supposed
35: * to be proxied with its target class (in case of it getting proxied in the first
36: * place). The value is <code>Boolean.TRUE</code> or <code>Boolean.FALSE</code>.
37: * <p>Proxy factories can set this attribute if they built a target class proxy
38: * for a specific bean, and want to enforce that that bean can always be cast
39: * to its target class (even if AOP advices get applied through auto-proxying).
40: */
41: public static final String PRESERVE_TARGET_CLASS_ATTRIBUTE = Conventions
42: .getQualifiedAttributeName(AutoProxyUtils.class,
43: "preserveTargetClass");
44:
45: /**
46: * Determine whether the given bean should be proxied with its target
47: * class rather than its interfaces. Checks the
48: * {@link #PRESERVE_TARGET_CLASS_ATTRIBUTE "preserveTargetClass" attribute}
49: * of the corresponding bean definition.
50: * @param beanFactory the containing ConfigurableListableBeanFactory
51: * @param beanName the name of the bean
52: * @return whether the given bean should be proxied with its target class
53: */
54: public static boolean shouldProxyTargetClass(
55: ConfigurableListableBeanFactory beanFactory, String beanName) {
56: if (beanFactory.containsBeanDefinition(beanName)) {
57: BeanDefinition bd = beanFactory.getBeanDefinition(beanName);
58: return Boolean.TRUE.equals(bd
59: .getAttribute(PRESERVE_TARGET_CLASS_ATTRIBUTE));
60: }
61: return false;
62: }
63:
64: }
|