首先,这里是对spring的一个基础的回顾。
初学spring的时候,总是会产生一种迷茫的心里。都说spring是现在最优秀的一款框架,在初学时,并没能理解它到底好在哪里。
本来。直接可以new的一个对象,我们却要通过配置bean的方式来实现,感觉变复杂了。
随着实战的升入,我也渐渐理解了它的好处。
在重构方面,Spring降低了我们项目中各个层次之间的耦合度,Spring的这种低侵入式的设计对我们代码的一个重构是十分方便的。
比如,之前在dao层,你用的hibernate,现在想换成mybatis。只需要重新写你的dao层,而不需要修改我们的service层。唯一修改的,也仅仅在修改在service层注入的bean对象的实例类而已。
Spring的两个核心,ioc和aop,ioc控制反转将我们new的过程转交给了Spring进行统一的管理,同时Spring在管理的时候,也会管理该bean的生命周期,Spring容器一旦启动,就会去创建bean的实例,当然,这是默认的情况,它还可以通过在bean里面配置。让bean变成懒加载的模式,即需要用bean的使用采取创建实例对象。aop的运用也是Spring当中的一个亮点,它采用动态代理的方式,对我们的bean进行一个管理,在其前后动态的去加入一些方法,来完成我们的功能,比如说事物,日志等。简化了代码量,提高了维护性。这就是面向切面编程的一个好处。
beanFactory是Spring的一个核心对象。它采用的工厂模式来实例化我们的对象。内部的代码大概是class.forName("xxxx").newInstance;它默认的是懒加载的形式。当然,在实际开发中,我们运用的最多的不是beanFactory,而是ActionContext对象,它对对象的创建是在容器启动的时候就已经创建了对象,而且,它是beanFactory的一个子类。对beanFactory做了扩展,功能更加强大。
值得注意的是,有时,在把对象交给spring管理的时候,该对象并不能直接new,例如hibernate的sessionFactory对象。这时,Spring也为我们提供了一种解决办法,那就是实现FactoryBean这个接口,然后覆写其中的三个方法getObject();getObjectType();isSingleton();。这样就解决了不能直接new的问题。