这是传说中的黎活明老师的课程,该课程网上有免费视频下载。之前提到的巴巴运动网项目就是黎活明老师一个人一手开发的(巴巴运动网在线首页--),以前是传智播客的必授课程,现在改为Android开发课程,还是黎老师授课。Android开发课程视频因为考虑到学员就业竞争力和培训机构之间竞争力的问题,暂不对外公布,想学习Android 3G开发的话欢迎来传智播客亲自聆听,而且传智播客现在特别推出了为期一周的Android 3G独立项目课程。
Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架。它的主要目得是简化企业开发。
IoC
所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。简单地说,即在类中只声明而不直接创建依赖对象实例。
IoC主要实现方式有两种:1、依赖查找(Dependency Lookup):容器提供回调接口和上下文环境给组件。<2>依赖注入(Dependency Injection,DI):组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系,即在运行期,由外部容器动态地将依赖对象注入到组件中。后者是时下最流行的IoC类型,其又分基本类型对象注入--包括构造注入和属性setter方法注入,和其他bean注入--包括普通bean注入和内部bean注入。
(网上有篇文章控制反转写得很详细,借鉴了一下,不过对DI的分析和老师的略有不同,这里采用老师的观点~里面还提到了模板模式,这是个很有用的模式,《Thinking in Java》里面作者写的所有test都是采用的这种方式)
bean的实例化
1、实例化spring容器的方式
(1)通过查找类路径下的配置文件实现:ApplicationContext ctx = new ClassPathXmlApplicationContext();
(2)通过查找文件系统路径下的配置文件实现:ApplicationContext ctx = new FileSystemXmlApplicationContext();
显而易见,后者会有OS移植时可能不兼容的问题(例如windows移植到linux),所以一般都使用前者。
2、实例化bean的方式
(1)使用类构造器实例化--现在基本上都是用这种方法实例化bean;
(2)使用静态方法实例化--不需要先实例化工厂类,工厂类里创建bean实例的方法为静态方法;
(3)使用实例工厂方法实例化--需要先实例化工厂类,工厂类里创建bean实例的方法为常规方法;
默认情况下,spring容器生成的bean实例为单例,而且会在容器启动时初始化bean,可以用Lazy-init="true"延迟。
何谓轻量级 何谓重量级
(老师语:)划分一个应用是否属于轻量级还是重量级,主要看它使用了多少服务。使用的服务越多,容器要为普通java对象做的工作就越多,必然会影响到应用的发布时间或者运行性能。
对于spring容器,它提供了很多服务,但这些服务并不是默认为应用打开的,应用需要某种服务,还需要指明使用该服务,如果应用使用的服务很少,如:只使用了spring核心服务,那么我们可以认为此时应用属于轻量级的,如果应用使用了spring提供的大部分服务,这时应用就属于重量级。目前EJB容器因为它默认为应用提供了EJB规范中所有的功能,所以它属于重量级。(据说要推出一个轻量级的ejb,不知道已经发布了没,按照老师的说法,没准轻量级ejb的策略之一就是关闭一些曾经一直默认开启的服务--纯属猜测,如有雷同,实属巧合)