Spring原理心得

      这是我进公司的第六天,对上午的学习有一些收获,记下来分享下,可让人郁闷的是花了一小时写的文章,因为提交失败就化为乌有了!!!郁闷啊!!!这也暴露出B/S的一个弊病,无状态的连接不能实现实时保存,一旦丢失将无法找回。所以下次记得,写blog的时候不要在网页上直接写,用word或记事本的文字编辑工具(现在的一些客户端的写博客软件也行)先在电脑上写好,存在硬盘里,小样,我看你还往哪溜!如果再溜了,那就的检查下RP了,哈哈!
      我再重新简单的写下刚才的内容。今天看了下经理发给我的关于Spring2.5的视频教程,看完后感悟颇深。对Spring有了更深的了解,不局限在原来仅仅应用的层面。
      大家都知道Spring是一种控制翻转(IoC-Inversion of Control)和面向切面(AOP)的容器框架(这里先不讨论AOP,只提下IoC);所谓控制反转Ioc即应用本身不再负责创建和维护依赖对象(即应用所要调用的对象),而是将这些工作交给外部的Ioc容器(这里就是Spring),这样就实现了控制权的转移,即控制反转。这样做要达到的目的是实现各层间的解耦,以便于项目的开发和维护。
      这样说了,可能很多人还是一头雾水,这里给大家举个例子,在做Spring与Hibernate或Ibatis这类持久层框架的结合项目时,Service层需要调用DAO层,但Service层不需要负责创建DAO的实例,而是Spring创建DAO的实例,再把DAO实例注入到Service中使用。这里的Service就是应用,而DAO就是Service所依赖的对象。这样就可以是想Service与DAO间的解耦,从而便于开发和维护。形象点可以这样理解:公司A生产笔记本电脑,但他不一定必须掌握生产显示屏的技术和工艺,他可以和公司B合作,让公司B为其提供所需的显示屏。至于显示屏如何生产,出现质量问题怎么办等等这些问题都不需要A关心,A只要在需要的时候从公司B买回显示屏装到自己的电脑上就ok了,各司其职,类似于分工的原理。
      到这里是不是会产生一个疑问,Spring到底是怎么创建和维护实例的呢?解决这个问题就要提到Spring的核心配置文件(这里暂且叫做beans.xml),在beans.xml中的bean节点下配置着需要管理的类的信息,Spring用dom4j读取beans.xml中bean节点的信息(id、class等),然后根据读取到的信息,通过反射机制创建相应类(类名为class的值)的实例(实例名为id的值)。
     现在实例有了,可该如何注入到应用(即需要调用实例的类)中呢?主要还是读取beans.xml中的信息,这一次读的是bean节点的子节点property的信息(name,ref等)。根据读取的信息将名为ref的值的实例通过获取应用中名为name的值的属性的setter方法,并用该方法将实例注入进去。所以在应用类中必须要有相应的属性,该属性的类型即为被注入的类,属性名必须与property节点的name的值保持一致,并且要为其提供相应的setter方法,否则Spring将导入失败,应用类调用时将抛出空指针异常(NullPointerException),所以当遇到这个异常时就要注意下上面提到的几个方面。
 到目前为止只说了自定义类型的注入,如果要注入常用类型(如Integer,String,boolean等)或者集合类型(如List,Set,Map等)该怎么办呢?其实原理跟上面都是一样的,只不过有些细节需要处理下。
 现在实例有了,也可以成功注入了,就可以放心调用了。
      以前也用过Spring,可也只是用而已,按照流程一步步按部就班的来,但不知道为什么要那样写,为什么要那么配,现在对原理有了一定的了解,敞亮多了!
      以上都是我对Spring的个人想法和观点,理解可能有偏颇,欢迎指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值