package com.android.pc.ioc.invoker; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import com.android.pc.ioc.app.Ioc; import com.android.pc.ioc.core.kernel.KernelLang.CauseRuntimeException; import com.android.pc.ioc.core.kernel.KernelReflect; import com.android.pc.ioc.util.InjectResouceSupply.InjectResouceType; public class InjectResources extends InjectInvoker { private int id; private Field field; InjectResouceType<?> injectResouceType; private Class<?> inClass; private Field injectAllfield; public InjectResources(int id, Field field, InjectResouceType<?> injectResouceType, Class<?> inClass, Field field2) { this.id = id; this.field = field; this.injectResouceType = injectResouceType; this.inClass = inClass; this.injectAllfield = field2; } @Override public void invoke(Object beanObject, Object... args) { Object value = injectResouceType.getResouce(id, field.getName()); if (value == null || !field.getType().isAssignableFrom(value.getClass())) { Ioc.getIoc().getLogger().e(beanObject.getClass().getSimpleName() + " 对象 " + field.getName() + "赋值不对 请检查\n"); return; } try { if (injectAllfield == null) { field.setAccessible(true); field.set(beanObject, value); return; } injectAllfield.setAccessible(true); Object values = injectAllfield.get(beanObject); if (null == values) { if (inClass.getDeclaringClass() == null) { values = inClass.newInstance(); } else { Constructor<?>[] c = inClass.getDeclaredConstructors(); c[0].setAccessible(true); values = c[0].newInstance(beanObject); } KernelReflect.set(beanObject, injectAllfield, values); } field.setAccessible(true); field.set(values, value); } catch (Exception e) { e.printStackTrace(); Ioc.getIoc().getLogger().e(beanObject.getClass().getSimpleName() + " 对象 " + field.getName() + "赋值不对 请检查\n"); throw new CauseRuntimeException(e); } } @Override public String toString() { return "InjectResources [id=" + id + "]"; } }