spring的最大作用ioc/di,将类与类的依赖关系写在配置文件中,
程序在运行时根据配置文件动态加载依赖的类,
降低的类与类之间的藕合度。
它的原理是在applicationContext.xml加入bean标签,
在bean标签中通过class属性说明具体类名,
通过property标签说明该类的属性名,
通过constructor-args说明构造子的参数。
其一切都是返射,当通过applicationContext.getBean("id名称")得到一个类实例时,
就是以bean标签的类名、属性名、构造子的参数为准,
通过反射实例对象,唤起对象的set方法设置属性值,
通过构造子的newInstance实例化得到对象。
正因为spring一切都是反射,反射比直接调用的处理速度慢,
所以这也是spring的一个问题。
spring第二大作用就是aop,其机理来自于代理模式,
代理模式有三个角色分别是通用接口、代理、真实对象代理、
真实对象实现的是同一接口,将真实对象作为代理的一个属性,
向客户端公开的是代理,当客户端调用代理的方法时,
代理找到真实对象,调用真实对象方法,
在调用之前之后提供相关的服务,如事务、安全、日志。
其名称分别是代理、真实对象、装备、关切点、连接点。
主要是可扩展性。如果现在你的客户觉得访问效率太低,程序不用hibernate了,
要使用jdbc,比如:UserDaoHibernateImpl(原来),现在修改为UserDaoJdbcImpl.
这个时候你要怎么办?直接去修改源代码?你原来不用接口进行引用,肯定是new 了一个
UserDaoHibernateImpl出来,如果多个地方都用到,你不但要去修改源代码,还要修改很多地方,
而是用spring的依赖注入呢,你只需要修改下配置,把bean的class属性给修改下,换下配置什么的
就可以了,降低后期维护成本
因为web应用大了,servletClass多了,所以用到struts来减轻我们的负担,使得模块更清晰,和更利于复用和管理。
因为web应用大了,表、字段多了,写sql语句会写死人,且比较容易出错,所以用到hibernate来获得它给我们的面向对象操作数据库的服务,省去了写n多sql的烦心事,且使我们的程序更加面向对象
因为逻辑和组件模块多了,因为层多了,于是我们考虑整一个spring,一来包装hibernate,提供更简便的服务接口及更易于管理的事务服务,二来代理了我们的服务层和dao层,使得这两层与实际的控制单元的关系变成ioc框架来管理,任何一方的修改都不会牵扯到双方都要修改的问题。总之spring就是把杂乱的dao、service、action给串了起来,变成了一个个可在程序外控制的模块,使其可以自由的组合在一起,即可获得想要的服务也不用烦他们之间的关系。
CopyRight@BUG