| 发表于:2008-02-13 14:37:3312楼 得分:0 |
依赖注入和反转控制 是spring的核心 1.java实例的调用者创建被调用的java实例,调用者直接new关键字创建被调用实例,程序高度耦合 2.调用者无需关心被调用者的具体实现过程,只需要找到符合某种标准的实例,即可使用,此时调用的代码面向接口编程,可以让调用者和被调用者解耦合,是是工厂模式大量使用的原因.但是调用者需要自己定位工厂,调用者和工厂耦合在一起 3.最理想的情况,程序完全无需要理会被调用者的实现,也无须定位工厂,是最好的解耦合的方法,实例之间的依赖关系由容器提供. 也就是靠spring来管理,用配制文件来管理实例直接的关系,如果遇到某个需要修改的需求,只需要修改相应的配制文件,而不需要修改每个类中对相应需要修改类的方法的实例话 现在开始面向接口编程,减少各个层之间的耦合 先创建一个接口 再创建一个类继承接口 在spring的xml对相应的类进行配制 //这是struts+spring的例子,随便写的 底下的ref指向配制文件中另外一个声明类 <bean name="/login" class="com.ccsee.em.struts.action.login.userloginaction"> <property name="users" ref="userinfoservice" /> <property name="popedoms" ref="popedomservice" /> </bean> <bean id="userinfoservice" class="com.ccsee.em.service.impl.userinfoserviceimpl"> <property name="userdao" ref="userdao" /> </bean> 这是action中的代码,初始话相应的接口,userinfoservice 是一个接口,通过配制文件指向相应的类 private userinfoservice users; public void setusers(userinfoservice users) { this.users = users; } 以前下的时候要想使用,service层中的userinfoservice的方法就必须,先初始话 userinfoservice users = new userinfoserviceimpl(); 才能使用users.***方法,这样如果userinfoserviceimpl中的方法需要更改,你需要改动的地方就是,程序中所有userinfoservice users = new userinfoserviceimpl(); 都需要修改 现在 private userinfoservice users; public void setusers(userinfoservice users) { this.users = users; } 这是设值注入,只要在相应的类和配制文件中进行初始话,就把2个类连接起来, 说的乱七八糟,自己学spring一个月,也就懂这些, 一个设值注入一个构造注入,通过配制文件来连接各层之间的关系 spring不止这些,对一些权限控制和事务控制有自己的处理方法,不知道我说的对不对 初学,个人认为spring的ioc在解耦合方面发挥重要作用吧,其他的不清楚,慢满研究. 自己转晕了,一起学习 | | |
|