首页 > 代码库 > flying中的AOP和IOC

flying中的AOP和IOC

技术分享

技术分享

 

注入属性:
private synchronized void injectReferenceServices() {
 if(this.injectReferenceServicesInitialized) return;
 PropertyDescriptor[] pds = PropertyUtils.getPropertyDescriptors(this.serviceClass);
 if(pds == null) return;
 for(PropertyDescriptor pd: pds) {
  Class<?> type = pd.getPropertyType();
  if(type == null) continue;
  if(type.getName().startsWith("java") || type.getName().startsWith("org"))  continue;
  if(module.getModuleConfig().getServiceConfigs().containsKey(type.getName())) {
   try {
    pd.getWriteMethod().invoke(this.serviceObject, new Object[]{module.getService(type)});
    logger.debug(this.serviceClass.getName()+" injectReferenceService ‘"+pd.getName()+"’success!");
   } catch (Exception e) {
    logger.error(this.serviceClass.getName()+" injectReferenceService ‘"+pd.getName()+"’失败,可能导致部分功能无法正常使用!", e);
   }
  }
 }
 this.injectReferenceServicesInitialized = true;
}

服务调用拦截:
public Object intercept(Object service, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
  。。。。。。。。。。。
   //
   if(!injectReferenceServicesInitialized) {
    this.injectReferenceServices();
   }
                    。。。。。。。
}
如似乎,一个不太完美的IOC实现了。

flying中的AOP和IOC