反射机制的应用

反射机制在于有字符串的类名,方法,字段名,组装成对应的对象协同操作,操作影响的效果作用在类的某个对象

具体作用在某个对象由invoke中传的对象参数决定

 反射机由类开始获取获取字段,方法,最后落脚某个已有对象操作

TbOrderIron et= new TbOrderIron();

 

String ne=na.charAt(0)+ na.substring(1, na.length()).toLowerCase();

 Class classType= et.getClass();

String setMethodName = "set" +ne;

 Method setMethod;

try {

setMethod = classType.getMethod(setMethodName, new Class[]{BigDecimal.class});

//obj.stringValue(spax.getpSpsxKey())!=null?BigDecimal.valueOf(Long.valueOf(obj.stringValue(spax.getpSpsxKey()))):null}

String st= sp.stringValue(spax.getpSpsxKey());

 BigDecimal bg=new BigDecimal(st);

setMethod.invoke(et, bg);

} catch (NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

 

 

 

ioc  di就是用反射实现

 

spring实现ioc di方式

看Spring 到底是怎么依赖注入的吧,其实依赖注入的思想也很简单,它是通过反射机制实现的,在实例化一个类时,

它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。让我们看看具体它是怎么做的吧。 

首先实例化一个类,像这样

public static Object newInstance(String className) {  

        Class<?> cls = null;  

        Object obj = null;  

        try {  

            cls = Class.forName(className);  

            obj = cls.newInstance();  

        } catch (ClassNotFoundException e) {  

            throw new RuntimeException(e);  

        } catch (InstantiationException e) {  

            throw new RuntimeException(e);  

        } catch (IllegalAccessException e) {  

            throw new RuntimeException(e);  

        }  

        return obj;  

    }  

public static void setProperty(Object obj, String name, String value) {  

        Class<? extends Object> clazz = obj.getClass();  

        try {  

            String methodName = returnSetMthodName(name);  

            Method[] ms = clazz.getMethods();  

            for (Method m : ms) {  

                if (m.getName().equals(methodName)) {  

                    if (m.getParameterTypes().length == 1) {  

                        Class<?> clazzParameterType = m.getParameterTypes()[0];  

                        setFieldValue(clazzParameterType.getName(), value, m,  

                                obj);  

                        break;  

                    }  

                }  

            }  

        } catch (SecurityException e) {  

            throw new RuntimeException(e);  

        } catch (IllegalArgumentException e) {  

            throw new RuntimeException(e);  

        } catch (IllegalAccessException e) {  

            throw new RuntimeException(e);  

        } catch (InvocationTargetException e) {  

            throw new RuntimeException(e);  

        }  

}  

 

 

猜你喜欢

转载自yuhuiblog6338999322098842.iteye.com/blog/2375114
今日推荐