Rumah > Java > javaTutorial > java反射应用

java反射应用

(*-*)浩
Lepaskan: 2019-09-27 16:11:10
ke hadapan
2395 orang telah melayarinya

反射

java反射应用

使用JAVA反应进行两个vo有相同字段名字进行子转换:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

@Test

    public void doTransTest() {

        A a= new A();

        A.setC(111L);

  

        B b= new B();

        doTrans(a, b);

    }

  

    /**

    *@param sour 来源vo

    *@param dest 待转换vo

    */

    public void doTrans(Object sour, Object dest) {

        if (sour == null) {

            dest = null;

            return;

        }

    //反射原理应用

        Class<?> sourceClass = sour.getClass();

        Class<?> destClass = dest.getClass();

        for (Field field : sourceClass.getDeclaredFields()) {

  

            String fieldName = field.getName();

            Object value;

  

            if (fieldName.equals("serialVersionUID")) {

                continue;

            }

  

            try {

                PropertyDescriptor propertyDescriptor = new PropertyDescriptor(fieldName, sourceClass);

                value = propertyDescriptor.getReadMethod().invoke(sour);

            } catch (Exception e) {

                //log

                continue;

            }

  

            if (value == null) {

                continue;

            }

            try {

                PropertyDescriptor propertyDescriptor = new PropertyDescriptor(fieldName, destClass);

                propertyDescriptor.getWriteMethod().invoke(dest, value);

            } catch (Exception e) {

                //log

                continue;

            }

        }

    }

Salin selepas log masuk

SpringIOC反射的应用:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

/**

    * springIOC和反射test

    *

    * @throws Exception

    */

   @Test

   public void reflexTest() throws Exception {

 

       /**

        * 第一步,springIOC解析如下bean

        *  <bean id="cartBean" class="com.mmall.pojo.Cart"></bean>

        */

       //解析bean字符串xxxxx

       String beanId = "cartBean";

       String beanClass = "com.mmall.pojo.Cart";

       Class<?> cls = Class.forName(beanClass);

       Object object = cls.newInstance();

       //模拟spring容器

       Map container = Maps.newHashMap();

       //bean注入spring容器,实例化成功

       container.put(beanId, object);

 

 

       /**

        * 第二步:模拟ref注入

        *      <bean id="cartBean" class="com.mmall.pojo.Cart"></bean>

        *          <property name="user" ref="userBean"></property>

        *      <bean>

        */

       //初始化refBean(userBean)

       String beanIdUser = "cartBean";

       String beanClassUser = "com.mmall.pojo.User";

       Class<?> clsUser = Class.forName(beanClassUser);

       Object objectUser = clsUser.newInstance();

       //并注入spring容器

       container.put(beanIdUser,objectUser);

 

       //得到cartBean的setUser方法

       String setUserName = "setUser";

       Object paramBean = container.get(beanIdUser);

       //cls是cart对象

       Method setter = cls.getMethod(setUserName, objectUser.getClass());

       //注入set方法

       setter.invoke(object, paramBean);

   }

Salin selepas log masuk

Atas ialah kandungan terperinci java反射应用. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Isu terkini
Bolehkah java digunakan sebagai bahagian belakang web?
daripada 1970-01-01 08:00:00
0
0
0
Pasang JAVA
daripada 1970-01-01 08:00:00
0
0
0
Tidak dapat memasang java
daripada 1970-01-01 08:00:00
0
0
0
Bagaimanakah php melaksanakan penyulitan sha1 java?
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan