1 package jfun.yan.xml.nuts.spring; 2 3 import jfun.yan.Component; 4 import jfun.yan.lifecycle.DefaultLifecycleManager; 5 import jfun.yan.lifecycle.Procedure; 6 7 import org.springframework.beans.factory.DisposableBean; 8 import org.springframework.beans.factory.config.BeanPostProcessor; 9 import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor; 10 import org.springframework.context.ApplicationContext; 11 12 18 public class SpringService { 19 private final ApplicationContext actxt; 20 private final DefaultLifecycleManager.DefaultLifecycle bean_lifecycle; 21 private final BeanPostProcessorQueue processors = new BeanPostProcessorQueue(); 22 private final BeanPostProcessorQueue destructions = new BeanPostProcessorQueue(); 24 25 30 public SpringService(ApplicationContext actxt, DefaultLifecycleManager manager){ 31 this.actxt = actxt; 32 this.bean_lifecycle = getDisposerLifecycle(manager); 33 } 34 private static final class BeanDisposer{ 35 private final DisposableBean db; 38 BeanDisposer(DisposableBean db) { 39 this.db = db; 40 } 41 void dispose() 42 throws Exception { 43 db.destroy(); 44 } 45 } 46 private static DefaultLifecycleManager.DefaultLifecycle 47 getDisposerLifecycle(DefaultLifecycleManager manager){ 48 return manager.newLifecycle().disposer(new Procedure(){ 49 public void invoke(Object self, Object [] args) 50 throws Throwable { 51 final BeanDisposer bd = (BeanDisposer)self; 52 bd.dispose(); 53 } 54 }); 55 } 56 59 public ApplicationContext getApplicationContext(){ 60 return actxt; 61 } 62 66 public void manageDisposableBean(DisposableBean db){ 67 bean_lifecycle.manageInstance(new BeanDisposer(db)); 68 } 69 75 public void addBeanPostProcessor(String key, Class type, Component bpp){ 76 if(DestructionAwareBeanPostProcessor.class.isAssignableFrom(type)){ 77 destructions.addBeanPostProcessor(key, bpp); 78 } 79 if(BeanPostProcessor.class.isAssignableFrom(type)){ 80 processors.addBeanPostProcessor(key, bpp); 81 } 82 } 83 86 public BeanPostProcessorQueue getProcessorQueue(){ 87 return processors; 88 } 89 92 public BeanPostProcessorQueue getDestructionAwares(){ 93 return destructions; 94 } 95 } 96 | Popular Tags |