依赖注入
发布时间:2020-12-14 05:41:55 所属栏目:百科 来源:网络整理
导读:依赖注入的方法有三种:构造子、seter、接口,在网上看到一个写的模拟构造子注入的代码,在我电脑上运行的时候发现一点问题,改了些东西就可以运行了,下面是代码: import java.lang.reflect.Constructor;interface ConstructorParamDeal {public Object []
依赖注入的方法有三种:构造子、seter、接口,在网上看到一个写的模拟构造子注入的代码,在我电脑上运行的时候发现一点问题,改了些东西就可以运行了,下面是代码: import java.lang.reflect.Constructor; interface ConstructorParamDeal { public Object [] dealParam(Class [] classes); } class RefectHelper{ public Object ConstructorHelper(String className,ConstructorParamDeal pd) throws Exception{ try{ // 取得构造函数 Constructor[] constructs = Class.forName(className).getDeclaredConstructors(); System.out.println(constructs.length); // 默认使用第一个构造函数创建实例 Class [] classes= constructs[0].getParameterTypes(); // 获取要注入的参数实例 Object []obj=pd.dealParam(classes); return constructs[0].newInstance(obj); }catch(Exception e){ throw e; } } } class ParamDeal implements ConstructorParamDeal{ public Object [] dealParam(Class[] classes) { Object [] obj=new Object[classes.length]; for (int i=0;i<obj.length;i++){ if (classes[i].equals(String.class)){ obj[i]="Hello World"; } } return obj; } } public class Test{ public String a,b; Test(String a,String b){ this.a = a; this.b = b; } Test(){ this.a = "a"; this.b = "b"; } public static void main(String[] arg) throws Exception{ RefectHelper refectHelper = new RefectHelper(); Test t = (Test) refectHelper.ConstructorHelper("Test",new ParamDeal()); System.out.println(t.a+" "+t.b); } } 而通过下面的代码大概模拟一下setter注入的方法: import java.lang.reflect.Field; import java.lang.reflect.Method; public class Test{ private String a; private String b; public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } public static void main(String[] arg) throws Exception{ Field[] fields = Class.forName("Test").getDeclaredFields(); String name; Test t = new Test(); for(int i = 0; i < fields.length; i++){ name = "set"+fields[i].getName().substring(0,1).toUpperCase()+fields[i].getName().substring(1); Class[] param = new Class[1]; param[0] = fields[i].getType(); Method func = Class.forName("Test").getMethod(name,param); func.invoke(t,"a"); } for(int i = 0; i < fields.length; i++){ name = "get"+fields[i].getName().substring(0,1).toUpperCase()+fields[i].getName().substring(1); Method func = Class.forName("Test").getMethod(name); System.out.println(func.invoke(t)); } } }这些代码只是在看书的时候看到,然后好奇Spring那些怎么实现,所以写着玩的。实际框架中当然要比这个复杂的多的多的多。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |