1 /*************************************************
2 * Copyright (c) Shen Li. All rights reserved. *
3 * http://joyaop.sourceforge.net *
4 * -------------------------------------------- *
5 * Distributable under LGPL license. *
6 * See terms of license at gnu.org. *
7 ************************************************/
8 package net.sf.joyaop.impl;
9
10 import net.sf.joyaop.impl.aspect.BaseRuntimeAspectImpl;
11
12 import java.util.HashMap;
13 import java.util.Map;
14
15 /***
16 * Not thread-safe. It ensures that the proxies contain no duplicate runtime aspect instance.
17 *
18 * @author Shen Li
19 */
20 public class RuntimeAspectInstanceFactory {
21 private final Map aspectInstances = new HashMap();
22 private final Class originalClass;
23
24 public RuntimeAspectInstanceFactory(Class originalClass) {
25 this.originalClass = originalClass;
26 }
27
28 public RuntimeAspectInstance getRuntimeAspectInstance(BaseRuntimeAspectImpl aspect) {
29 RuntimeAspectInstance aspectInstance = (RuntimeAspectInstance) aspectInstances.get(aspect.getAspectClass());
30 if (aspectInstance == null) {
31 aspectInstance = aspect.createRuntimeAspectInstance(originalClass);
32 aspectInstances.put(aspect.getAspectClass(), aspectInstance);
33 }
34 return aspectInstance;
35 }
36 }