/* * Copyright 2002-2007 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. */ package org.springframework.beans.factory.wiring; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.util.Assert; /** * Holder for bean wiring metadata information about a particular class. Used in * conjunction with the {@link org.springframework.beans.factory.annotation.Configurable} * annotation and the AspectJ <code>AnnotationBeanConfigurerAspect</code>. * * @author Rod Johnson * @author Juergen Hoeller * @since 2.0 * @see BeanWiringInfoResolver * @see org.springframework.beans.factory.config.AutowireCapableBeanFactory * @see org.springframework.beans.factory.annotation.Configurable */ public class BeanWiringInfo { /** * Constant that indicates autowiring bean properties by name. * @see #BeanWiringInfo(int, boolean) * @see org.springframework.beans.factory.config.AutowireCapableBeanFactory#AUTOWIRE_BY_NAME */ public static final int AUTOWIRE_BY_NAME = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME; /** * Constant that indicates autowiring bean properties by type. * @see #BeanWiringInfo(int, boolean) * @see org.springframework.beans.factory.config.AutowireCapableBeanFactory#AUTOWIRE_BY_TYPE */ public static final int AUTOWIRE_BY_TYPE = AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE; private String beanName = null; private boolean isDefaultBeanName = false; private int autowireMode = AutowireCapableBeanFactory.AUTOWIRE_NO; private boolean dependencyCheck = false; /** * Create a default BeanWiringInfo that suggests plain initialization of * factory and post-processor callbacks that the bean class may expect. */ public BeanWiringInfo() { } /** * Create a new BeanWiringInfo that points to the given bean name. * @param beanName the name of the bean definition to take the property values from * @throws IllegalArgumentException if the supplied beanName is <code>null</code>, * is empty, or consists wholly of whitespace */ public BeanWiringInfo(String beanName) { this(beanName, false); } /** * Create a new BeanWiringInfo that points to the given bean name. * @param beanName the name of the bean definition to take the property values from * @param isDefaultBeanName whether the given bean name is a suggested * default bean name, not necessarily matching an actual bean definition * @throws IllegalArgumentException if the supplied beanName is <code>null</code>, * is empty, or consists wholly of whitespace */ public BeanWiringInfo(String beanName, boolean isDefaultBeanName) { Assert.hasText(beanName, "'beanName' must not be empty"); this.beanName = beanName; this.isDefaultBeanName = isDefaultBeanName; } /** * Create a new BeanWiringInfo that indicates autowiring. * @param autowireMode one of the constants {@link #AUTOWIRE_BY_NAME} / * {@link #AUTOWIRE_BY_TYPE} * @param dependencyCheck whether to perform a dependency check for object * references in the bean instance (after autowiring) * @throws IllegalArgumentException if the supplied <code>autowireMode</code> * is not one of the allowed values * @see #AUTOWIRE_BY_NAME * @see #AUTOWIRE_BY_TYPE */ public BeanWiringInfo(int autowireMode, boolean dependencyCheck) { if (autowireMode != AUTOWIRE_BY_NAME && autowireMode != AUTOWIRE_BY_TYPE) { throw new IllegalArgumentException("Only constants AUTOWIRE_BY_NAME and AUTOWIRE_BY_TYPE supported"); } this.autowireMode = autowireMode; this.dependencyCheck = dependencyCheck; } /** * Return whether this BeanWiringInfo indicates autowiring. */ public boolean indicatesAutowiring() { return (this.beanName == null); } /** * Return the specific bean name that this BeanWiringInfo points to, if any. */ public String getBeanName() { return this.beanName; } /** * Return whether the specific bean name is a suggested default bean name, * not necessarily matching an actual bean definition in the factory. */ public boolean isDefaultBeanName() { return this.isDefaultBeanName; } /** * Return one of the constants {@link #AUTOWIRE_BY_NAME} / * {@link #AUTOWIRE_BY_TYPE}, if autowiring is indicated. */ public int getAutowireMode() { return this.autowireMode; } /** * Return whether to perform a dependency check for object references * in the bean instance (after autowiring). */ public boolean getDependencyCheck() { return this.dependencyCheck; } }