| package org.eclipse.gemini.blueprint.util; |
| |
| /* |
| * Copyright 2002-2012 the original author or authors. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import org.springframework.beans.BeansException; |
| import org.springframework.beans.factory.*; |
| |
| /** |
| * FactoryBean that exposes an arbitrary target bean under a different name. |
| * |
| * <p>Usually, the target bean will reside in a different bean definition file, |
| * using this FactoryBean to link it in and expose it under a different name. |
| * Effectively, this corresponds to an alias for the target bean. |
| * |
| * <p><b>NOTE:</b> For XML bean definition files, an {@code <alias>} |
| * tag is available that effectively achieves the same. |
| * |
| * <p>A special capability of this FactoryBean is enabled through its configuration |
| * as bean definition: The "targetBeanName" can be substituted through a placeholder, |
| * in combination with Spring's {@link org.springframework.beans.factory.config.PropertyPlaceholderConfigurer}. |
| * Thanks to Marcus Bristav for pointing this out! |
| * |
| * @author Juergen Hoeller |
| * @since 1.2 |
| * @see #setTargetBeanName |
| * @see org.springframework.beans.factory.config.PropertyPlaceholderConfigurer |
| * @deprecated as of Spring 3.2, in favor of using regular bean name aliases |
| * (which support placeholder parsing since Spring 2.5) |
| */ |
| @Deprecated |
| public class BeanReferenceFactoryBean implements SmartFactoryBean<Object>, BeanFactoryAware { |
| |
| private String targetBeanName; |
| |
| private BeanFactory beanFactory; |
| |
| |
| /** |
| * Set the name of the target bean. |
| * <p>This property is required. The value for this property can be |
| * substituted through a placeholder, in combination with Spring's |
| * PropertyPlaceholderConfigurer. |
| * @param targetBeanName the name of the target bean |
| * @see org.springframework.beans.factory.config.PropertyPlaceholderConfigurer |
| */ |
| public void setTargetBeanName(String targetBeanName) { |
| this.targetBeanName = targetBeanName; |
| } |
| |
| @Override |
| public void setBeanFactory(BeanFactory beanFactory) { |
| this.beanFactory = beanFactory; |
| if (this.targetBeanName == null) { |
| throw new IllegalArgumentException("'targetBeanName' is required"); |
| } |
| if (!this.beanFactory.containsBean(this.targetBeanName)) { |
| throw new NoSuchBeanDefinitionException(this.targetBeanName, this.beanFactory.toString()); |
| } |
| } |
| |
| |
| @Override |
| public Object getObject() throws BeansException { |
| if (this.beanFactory == null) { |
| throw new FactoryBeanNotInitializedException(); |
| } |
| return this.beanFactory.getBean(this.targetBeanName); |
| } |
| |
| @Override |
| public Class<?> getObjectType() { |
| if (this.beanFactory == null) { |
| return null; |
| } |
| return this.beanFactory.getType(this.targetBeanName); |
| } |
| |
| @Override |
| public boolean isSingleton() { |
| if (this.beanFactory == null) { |
| throw new FactoryBeanNotInitializedException(); |
| } |
| return this.beanFactory.isSingleton(this.targetBeanName); |
| } |
| |
| @Override |
| public boolean isPrototype() { |
| if (this.beanFactory == null) { |
| throw new FactoryBeanNotInitializedException(); |
| } |
| return this.beanFactory.isPrototype(this.targetBeanName); |
| } |
| |
| @Override |
| public boolean isEagerInit() { |
| return false; |
| } |
| |
| } |