day38 01-Spring框架的概

Action里面调Service,Service里面调DAO,在Action里面new一个Service,在Service里面new一个DAO。有了Spring以后能够不用new对象了。AOP里面有不少术语或者是思想是比较难理解的。除了这些以外呢就没有什么特别复杂的地方了。web

Spring3.2是Spring里面最高的版本了。Spring的依赖包spring-framework-3.0.2.RELEASE-dependencies有不少东西,好比说c3p0,log4j,dbcp链接池等等。有不少很是很是多的内容,除了Spring以外的要用的内容基本均可以在这个依赖包里面找到。Spring3.0.2提供了依赖包,可是往上升级的时候依赖包就没有了,也就是说Spring3.0.2的依赖包已经足够了。spring


UserService userService = new UserService();这样的写的话通常程序是不容易扩展的。由于在面向对象中最好不要直接new一个实现类,通常去面向接口编程。通常是为这个实现类建立一个接口,面向接口编程。面向接口编程是可扩展性。假设UserService是接口,UserService userService = new UserServiceImpl();就很容易扩展了。编程

可是这种方式也不是很好.面向接口编程也不是很爽的.把程序具体的实现编写到程序中,切换底层的实现,须要修改源代码.形成程序:紧密耦合.什么是紧密耦合?就是我在这里每次想修改一个东西就须要修改程序的源代码。spa

Java开发程序的OCP原则。OCP:open-close原则:扩展功能尽可能不要修改源程序,提供新的方法或者是属性的形式扩展其功能.对扩展是开放的,对修改是关闭的.hibernate

使用工厂模式来进行扩展,不修改其源代码。提供一个工厂类让接口和具体实现类完成解耦。3d

工厂类的写法以下:xml

public void BeanFactory{对象

     public UserService getUserService(){//提供一个方法返回UserService.blog

       return new UserServiceImpl();接口

     }

}

这样咱们在web层就能够写个UserService=或者是得到工厂类之后调用工厂类的方法。把程序与具体实现类的耦合转成与工厂的耦合.与实现类完成解除耦合的形式.也就是说UserService与UserServiceImpl它俩之间就没有了这种耦合的关系了.

有人说这样也很差啊,虽然接口没有与具体实现类耦合,可是它与工厂耦合了.你如今UserService  userService  得先得到一个工厂。假设BeanFactory已经有了,BeanFactory factory = ...

//得到工厂

BeanFactory factory  = ...

UserService userService = factory.getUserService();

这样就变成了一个工厂的耦合。这样也不并非特别的好。若是有了反射和配置文件,能够这么去作。


 

 public class BeanFactory{

      public UserService getUserService(){

          //反射+配置文件

         Class.forName(类名).new Instance();//直接生成一个类的实例,把这个实例一返回.

          //在这里读取到类的全路径就能够了。

}

配置文件能够是xml、properties(属性文件).假设配置文件是属性文件(properties),能够这么写:

className =  cn.itcast.service.UserServiceImpl  

能够读到ClassName那个key找到里面的内容把它放到Class.forName里面就能够生成对象实例把它返回了。这样咱们每次再去修改这个内容的时候

不用去修改源代码了。切换实现不须要修改源代码了。


Spring IOC的底层原理=工厂+反射+配置文件。因此它的底层原理是提供一个工厂Bean,一个配置文件,把类全都配置到配置文件中,经过XML解析获取到类的全路径,从而反射得到一个类的实例。

 


这就是IOC容器底层原理的实现。

 

 

声明式事务的管理,只须要你把事务一配置,就是你不须要手动地开启事务或者是提交事务。在hibernate里面本身去开启事务或者是提交事务等等一系列的,这些你只要在Spring配置好以后你全部的DAO层、Service层不须要手动写事务的代码了。

相关文章
相关标签/搜索