自己动手打造ICO容器
需要五个类
(容器类),需要用此容器管理的类全部集成此类
import java.lang.reflect.Field;import com.metarnet.Injects.Inject;
/** * 容器 */public class IOC {/** * 初始化 * @param <T> * @throws ClassNotFoundException * @throws IllegalAccessException * @throws IllegalArgumentException */public void Init() throws Exception{Field[] fields = getClass().getDeclaredFields();for(Field field : fields){Inject inject=field.getAnnotation(Inject.class);if(inject!=null){field.setAccessible(true);field.set(this,Class.forName(inject.ClassName().trim()).newInstance());}}}}
(注解类)
/** * */package com.metarnet.Injects;
import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;
/** * 类的依赖注入 * @author yanfan */@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME) public @interface Inject {public String ClassName();}
(主函数用于测试)
package com.metarnet.Main;
import com.metarnet.Injects.Inject;import com.metarnet.Interfaces.Interface1;import com.metarnet.extend.IOC;
public class TestIOC extends IOC{@Inject(ClassName = "com.metarnet.Interfaces.imps.Interface1Impl")private Interface1 interface1;@Inject(ClassName = "com.metarnet.Interfaces.imps.Interface1Impl2")private Interface1 interface2;public Interface1 getInterface1() {return interface1;}
public void setInterface1(Interface1 interface1) {this.interface1 = interface1;}
public static void main(String[] args) {TestIOC ioc = new TestIOC();try {ioc.Init();} catch (Exception e) {e.printStackTrace();}ioc.interface1.SayHello();ioc.interface2.SayHello();}
}
接口
package com.metarnet.Interfaces;
public interface Interface1{public void SayHello();}继承接口类1
package com.metarnet.Interfaces.imps;
import com.metarnet.Interfaces.Interface1;
public class Interface1Impl implements Interface1{
@Overridepublic void SayHello() {System.out.println("Hello World,My Name Is Interface1Impl");}
} 继承接口类2
package com.metarnet.Interfaces.imps;
import com.metarnet.Interfaces.Interface1;
public class Interface1Impl2 implements Interface1{
@Overridepublic void SayHello() {System.out.println("Hello World,My Name Is Interface1Impl2");}
}
另附资源下载地址 http://download.csdn.net/detail/yanfan0916/4773699