给Bean属性注入null值
空字符串值可以使用<value/>元素可用来表示。例如:
1
2
3
|
< bean class = "ExampleBean" > < property name = "email" >< value /></ property > </ bean > |
等同于Java代码: exampleBean.setEmail("")。
null值则可以使用<null/>元素可用来表示。例如:
1
2
3
|
< bean class = "ExampleBean" > < property name = "email" >< null /></ property > </ bean > |
等同于Java代码:exampleBean.setEmail(null)。
Spring注入bean 为null的相关问题
问题描述
有一个类注入 发现里面的MongoLogInfoDAO始终为null
1
2
3
4
5
6
7
8
9
|
@Component ( "countFunction" ) public class CountFunction implements AviatorFunction { @Resource (name = "mongoLogInfoDAO" ) private MongoLogInfoDAO mongoLogInfoDAO; @Override public String getName() { return "count" ; } |
原因是竟然是因为使用了 new 方式使用 CountFunction 导致类中的mongoLogInfoDao 无法注入
1
|
AviatorEvaluator.addFunction( new CountFunction()); |
这个是不对的, 为啥?
这个对象是你new出来的 ,不是spring创建的 当然无法DI依赖注入
反之,如果你这个Bean是交易Spring IOC 容器管理的,那也应该报错NoSuchBeanDefinitionException异常
如何处理?
应对这个问题的最好办法是 不要new
还有一种情况spring 注入的时候是null
问题描述
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
@Component ( "functionExecutor" ) public class FunctionExecutor { protected static final Loggerx LOGGER = Loggerx.getLogger( "system" ); @Resource (name = "mongoDAO" ) private MongoDAO mongoDAO; @Resource (name = "prism4001Producer" ) private SmartMQProducer prism4001Producer; @Resource (name = "whereGreaterThenFunction" ) private WhereGreaterThenFunction whereGreaterThenFunction; @Resource (name = "countFunction" ) private CountFunction countFunction; @Resource (name = "devideFunction" ) private DevideFunction devideFunction; @Resource (name = "selectFunction" ) private SelectFunction selectFunction; @Resource (name = "whereEqualFunction" ) private WhereEqualFunction whereEqualFunction; @Resource (name = "timeFunction" ) private TimeFunction timeFunction; @Resource (name = "whereLessThenFunction" ) private WhereLessThenFunction whereLessThenFunction; @Resource (name = "whereGreaterThenEqualFunction" ) private WhereGreaterThenEqualFunction whereGreaterThenEqualFunction; @Resource (name = "whereInFunction" ) private WhereInFunction whereInFunction; @Resource (name = "greaterThenFunction" ) private GreaterThenFunction greaterThenFunction; @Resource (name = "regexFunction" ) private RegexFunction regexFunction; @Resource (name = "maxFunction" ) private MaxFunction maxFunction; @Resource (name = "minFunction" ) private MinFunction minFunction; @Resource (name = "equalFunction" ) private EqualFunction equalFunction; @Resource (name = "lessThenEqualFunction" ) private LessThenEqualFunction lessThenEqualFunction; @Resource (name = "lessThenFunction" ) private LessThenFunction lessThenFunction; @Resource (name = "plusFunction" ) private PlusFunction plusFunction; @Resource (name = "multiFunction" ) private MultiFunction multiFunction; @Resource (name = "notEqualFunction" ) private NotEqualFunction notEqualFunction; @Resource (name = "whereNotInFunction" ) private WhereNotInFunction whereNotInFunction; @Resource (name = "sumFunction" ) private SumFunction sumFunction; @Resource (name = "minusFunction" ) private MinusFunction minusFunction; { AviatorEvaluator.addFunction(whereGreaterThenFunction); AviatorEvaluator.addFunction(countFunction); AviatorEvaluator.addFunction(devideFunction); AviatorEvaluator.addFunction(selectFunction); AviatorEvaluator.addFunction(whereEqualFunction); AviatorEvaluator.addFunction(timeFunction); AviatorEvaluator.addFunction(whereLessThenFunction); AviatorEvaluator.addFunction(whereGreaterThenEqualFunction); AviatorEvaluator.addFunction(whereInFunction); AviatorEvaluator.addFunction(greaterThenFunction); AviatorEvaluator.addFunction(regexFunction); AviatorEvaluator.addFunction(maxFunction); AviatorEvaluator.addFunction(minFunction); AviatorEvaluator.addFunction(equalFunction); AviatorEvaluator.addFunction(lessThenEqualFunction); AviatorEvaluator.addFunction(lessThenFunction); AviatorEvaluator.addFunction(plusFunction); AviatorEvaluator.addFunction(multiFunction); AviatorEvaluator.addFunction(notEqualFunction); AviatorEvaluator.addFunction(whereNotInFunction); AviatorEvaluator.addFunction(sumFunction); AviatorEvaluator.addFunction(minusFunction); } |
容器加载这个functionExecutor这个bean的时候,走到静态代码块发现注入的sumFunction ,minusFunction都是null
这个是为什么呢?
spring 执行代码块的时候,其他的bean 还未注入,会导致注入的bean 是null
如何处理?
如果你想 当spring加载 bean 初始化完成之后,自动执行一些初始化方法
使用
@PostConstruct
注解可以实现
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/xiaojia1100/article/details/51595362