发表于: 2017-09-17 00:07:09

1 772


今天完成的事:

学完了Spring第二章,对于简单的Bean的不同注入方式有了一定的了解,如何装配Bean。

还了解了使用表达式(SpEL)来装配Bean。


SpEL的原理主要是通过计算获得指,然后将值注入到相应的Bean对象的属性。SpEL以#{}将表达式包括起来

使用SpEL装配简单值,如下所示

上图将Bean对象someThing通过SpEL表达式注入到Bean 对象test的属性someThing


了解了如何使用SpEL将其他Bean对象的属性注入到特定的Bean属性中

上图中,将id为someThing的Bean对象的count属性注入到了id为test的Bean对象的count属性。使用的是SpEL表达式#{someThing.count}  SpEL表达式访问Bean对象的属性。SpEL表达式中使用"."来访问某个Bean对象的属性或执行某个Bean对象的方法。

实际可以将以上过程看成为

HelloWorld hello = new HelloWorld();

hello.setCount( new cat().getCount() );

这样hello对象的Count属性就拥有了cat对象的Count属性的值


了解到了在使用SpEL表达式执行某个Bean对象的方法时若该Bean为null值时避免产生nullPointException因此使用“?.”来替代"."来执行一个方法,如下所示

上图中,Bean对象test对象调用了Bean对象SomeThing的getCount方法并在这个返回值上加上了300然后注入给了Bean对象test的属性count.可以看到在调用Bean对象someThing的方法时使用了?.   如果someThing是个空,调用这个getCount方法会报NollPointException异常。但使用了?.符号来调用后,在调用getCount方法前会先判断符号?.左边的值是否为null,若为Null,不会调用getCount方法。


了解了SpEL表达式的运算符,因为过于简单就不再详述了。只有一点要注意的就是在使用逻辑符号< >时因为在配置文件中是关键字因此必须使用替代符号来代替,如下图


明天计划的事

继续学习Spring,争取看完<Spring实战>第三章和第四章

遇到的问题:

在编写SpEL表达式访问任意Bean对象的属性时发现会报错,主要是访问的Bean对象的属性没有提供get和set方法,因此Spring无法读取。提供了set和get方法就可以了。这也能理解,因为Spring的Bean对象都是通过反射来进行创建的,不把属性设置为public或者提供Get和Set方法Spring是无法获取到值的。


收获:

对Spring认识更深入了。


返回列表 返回列表
评论

    分享到