KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > springframework > aop > support > AbstractBeanFactoryPointcutAdvisor


1 /*
2  * Copyright 2002-2007 the original author or authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.support;
18
19 import org.aopalliance.aop.Advice;
20
21 import org.springframework.beans.factory.BeanFactory;
22 import org.springframework.beans.factory.BeanFactoryAware;
23 import org.springframework.util.Assert;
24
25 /**
26  * Abstract BeanFactory-based PointcutAdvisor that allows for any Advice
27  * to be configured as reference to an Advice bean in a BeanFactory.
28  *
29  * <p>Specifying the name of an advice bean instead of the advice object itself
30  * (if running within a BeanFactory) increases loose coupling at initialization time,
31  * in order to not initialize the advice object until the pointcut actually matches.
32  *
33  * @author Juergen Hoeller
34  * @since 2.0.2
35  * @see #setAdviceBeanName
36  * @see DefaultBeanFactoryPointcutAdvisor
37  */

38 public abstract class AbstractBeanFactoryPointcutAdvisor extends AbstractPointcutAdvisor implements BeanFactoryAware {
39
40     private String JavaDoc adviceBeanName;
41
42     private BeanFactory beanFactory;
43
44     private Advice advice;
45
46     private final Object JavaDoc adviceMonitor = new Object JavaDoc();
47
48
49     /**
50      * Specify the name of the advice bean that this advisor should refer to.
51      * <p>An instance of the specified bean will be obtained on first access
52      * of this advisor's advice. This advisor will only ever obtain at most one
53      * single instance of the advice bean, caching the instance for the lifetime
54      * of the advisor.
55      * @see #getAdvice()
56      */

57     public void setAdviceBeanName(String JavaDoc adviceBeanName) {
58         this.adviceBeanName = adviceBeanName;
59     }
60
61     /**
62      * Return the name of the advice bean that this advisor refers to, if any.
63      */

64     public String JavaDoc getAdviceBeanName() {
65         return this.adviceBeanName;
66     }
67
68     public void setBeanFactory(BeanFactory beanFactory) {
69         this.beanFactory = beanFactory;
70     }
71
72
73     public Advice getAdvice() {
74         synchronized (this.adviceMonitor) {
75             if (this.advice == null && this.adviceBeanName != null) {
76                 Assert.state(this.beanFactory != null, "BeanFactory must be set to resolve 'adviceBeanName'");
77                 this.advice = (Advice) this.beanFactory.getBean(this.adviceBeanName, Advice.class);
78             }
79             return this.advice;
80         }
81     }
82
83     public String JavaDoc toString() {
84         return getClass().getName() + ": advice bean '" + getAdviceBeanName() + "'";
85     }
86
87 }
88
Popular Tags