private void initJoinpointAspect(AspectDefinition def, Map<AspectDefinition, Set<Joinpoint>> jpAspects) { ConcurrentHashMap<Joinpoint, Object> joins = new ConcurrentHashMap<Joinpoint, Object>(); joinpointAspects.put(def, joins); Set<Joinpoint> joinpoints = jpAspects.get(def); for (Joinpoint joinpoint : joinpoints) { Object aspect = def.getFactory().createPerJoinpoint(getClassAdvisor(), instanceAdvisor, joinpoint); if (aspect == null) { joins.put(joinpoint, NULL_ASPECT); } else { joins.put(joinpoint, aspect); } } }
public Object getPerInstanceAspect(AspectDefinition def) { // aspects is a weak hash map of AspectDefinitions so that perinstance advices can be undeployed/redeployed if (aspects == null) { initializeAspects(); if (aspects != null) { return aspects.get(def); } } if (!aspects.containsKey(def)) { synchronized (this) // doublecheck, but I don't want to synchronize everywhere and dynamic aspects are rare { if (aspects.containsKey(def)) return aspects.get(def); if (classAdvisor != null && getClassAdvisor() instanceof ClassAdvisor) { ClassAdvisor cadvisor = (ClassAdvisor) getClassAdvisor(); cadvisor.getPerInstanceAspectDefinitions().add(def); Object aspect = def.getFactory().createPerInstance(null, null); WeakHashMap<AspectDefinition, Object> copy = new WeakHashMap<AspectDefinition, Object>(aspects); copy.put(def, aspect); aspects = copy; return aspect; } } } return aspects.get(def); }
private synchronized void initializeAspects() if (getClassAdvisor() == null) return; if (aspects != null) return; // doublecheck I know, but I don't want to do synchronization if not needed Object aspect = def.getFactory().createPerInstance(getClassAdvisor(), instanceAdvisor); aspects.put(def, aspect); Set<AspectDefinition> defs = getClassAdvisor().getPerInstanceAspectDefinitions(); if (defs.size() > 0) Object aspect = def.getFactory().createPerInstance(getClassAdvisor(), instanceAdvisor); aspects.put(def, aspect);
private synchronized void initializeJoinpointAspects() if (getClassAdvisor() == null) return; if (joinpointAspects != null) return; // doublecheck I know, but I don't want to do synchronization if not needed if (instanceAdvisor instanceof Advisor) Map<AspectDefinition, Set<Joinpoint>> jpAspects = getClassAdvisor().getPerInstanceJoinpointAspectDefinitions(); if (jpAspects.size() > 0)
if (classAdvisor != null && getClassAdvisor() instanceof ClassAdvisor) ClassAdvisor cadvisor = (ClassAdvisor) getClassAdvisor(); cadvisor.addPerInstanceJoinpointAspect(joinpoint, def); aspect = def.getFactory().createPerJoinpoint(getClassAdvisor(), instanceAdvisor, joinpoint); WeakHashMap<AspectDefinition, ConcurrentHashMap<Joinpoint, Object>> copy = new WeakHashMap<AspectDefinition, ConcurrentHashMap<Joinpoint, Object>>(joinpointAspects); Map<Joinpoint, Object> map = copy.get(def);