1
1
package com .ctrip .framework .apollo .spring .property ;
2
2
3
+ import java .lang .ref .WeakReference ;
3
4
import java .lang .reflect .Field ;
4
5
import java .lang .reflect .InvocationTargetException ;
5
6
import java .lang .reflect .Method ;
@@ -16,7 +17,7 @@ public class SpringValue {
16
17
17
18
private MethodParameter methodParameter ;
18
19
private Field field ;
19
- private Object bean ;
20
+ private WeakReference < Object > beanRef ;
20
21
private String beanName ;
21
22
private String key ;
22
23
private String placeholder ;
@@ -25,7 +26,7 @@ public class SpringValue {
25
26
private boolean isJson ;
26
27
27
28
public SpringValue (String key , String placeholder , Object bean , String beanName , Field field , boolean isJson ) {
28
- this .bean = bean ;
29
+ this .beanRef = new WeakReference <>( bean ) ;
29
30
this .beanName = beanName ;
30
31
this .field = field ;
31
32
this .key = key ;
@@ -38,7 +39,7 @@ public SpringValue(String key, String placeholder, Object bean, String beanName,
38
39
}
39
40
40
41
public SpringValue (String key , String placeholder , Object bean , String beanName , Method method , boolean isJson ) {
41
- this .bean = bean ;
42
+ this .beanRef = new WeakReference <>( bean ) ;
42
43
this .beanName = beanName ;
43
44
this .methodParameter = new MethodParameter (method , 0 );
44
45
this .key = key ;
@@ -60,6 +61,10 @@ public void update(Object newVal) throws IllegalAccessException, InvocationTarge
60
61
}
61
62
62
63
private void injectField (Object newVal ) throws IllegalAccessException {
64
+ Object bean = beanRef .get ();
65
+ if (bean == null ) {
66
+ return ;
67
+ }
63
68
boolean accessible = field .isAccessible ();
64
69
field .setAccessible (true );
65
70
field .set (bean , newVal );
@@ -68,6 +73,10 @@ private void injectField(Object newVal) throws IllegalAccessException {
68
73
69
74
private void injectMethod (Object newVal )
70
75
throws InvocationTargetException , IllegalAccessException {
76
+ Object bean = beanRef .get ();
77
+ if (bean == null ) {
78
+ return ;
79
+ }
71
80
methodParameter .getMethod ().invoke (bean , newVal );
72
81
}
73
82
@@ -103,8 +112,16 @@ public boolean isJson() {
103
112
return isJson ;
104
113
}
105
114
115
+ boolean isTargetBeanValid () {
116
+ return beanRef .get () != null ;
117
+ }
118
+
106
119
@ Override
107
120
public String toString () {
121
+ Object bean = beanRef .get ();
122
+ if (bean == null ) {
123
+ return "" ;
124
+ }
108
125
if (isField ()) {
109
126
return String
110
127
.format ("key: %s, beanName: %s, field: %s.%s" , key , beanName , bean .getClass ().getName (), field .getName ());
0 commit comments