1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    *
5    *
6    *
7    * The contents of this file are subject to the terms of the Liferay Enterprise
8    * Subscription License ("License"). You may not use this file except in
9    * compliance with the License. You can obtain a copy of the License by
10   * contacting Liferay, Inc. See the License for the specific language governing
11   * permissions and limitations under the License, including but not limited to
12   * distribution rights of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portal.spring.annotation;
24  
25  import com.liferay.portal.kernel.annotation.BeanReference;
26  import com.liferay.portal.kernel.bean.BeanLocatorException;
27  import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil;
28  
29  import java.beans.PropertyDescriptor;
30  
31  import java.lang.reflect.AnnotatedElement;
32  import java.lang.reflect.Member;
33  
34  import org.springframework.beans.BeansException;
35  import org.springframework.beans.factory.BeanFactory;
36  import org.springframework.beans.factory.annotation.InjectionMetadata;
37  
38  /**
39   * <a href="BeanReferenceElement.java.html"><b><i>View Source</i></b></a>
40   *
41   * @author Michael Young
42   */
43  public class BeanReferenceElement extends InjectionMetadata.InjectedElement {
44  
45      public BeanReferenceElement(
46          BeanFactory beanFactory, Member member,
47          PropertyDescriptor propertyDescriptor) {
48  
49          super(member, propertyDescriptor);
50  
51          _beanFactory = beanFactory;
52  
53          AnnotatedElement annotatedElement = (AnnotatedElement)member;
54  
55          BeanReference beanReference = annotatedElement.getAnnotation(
56              BeanReference.class);
57  
58          _name = beanReference.name();
59      }
60  
61      protected Object getResourceToInject(
62          Object target, String requestingBeanName) {
63  
64          try {
65              return _beanFactory.getBean(_name, getResourceType());
66          }
67          catch (BeansException be) {
68              try {
69                  return PortalBeanLocatorUtil.locate(_name);
70              }
71              catch (BeanLocatorException ble) {
72                  throw be;
73              }
74          }
75      }
76  
77      private BeanFactory _beanFactory;
78      private String _name;
79  
80  }