Spring是一种多层的J2EE应用程序框架,其核心就是提供一种新的机制管理业务对象及其依赖关系。那spring框架怎么体现降低耦合性的?下面来我们就来给大家讲解一下。
首先定义Duck接口:
public interface Duck { public void performFly(); }
接下来实现这个Duck接口
public class DuckImpl implements Duck { FlyBehavior flyBehavior; String name; public DuckImpl(String name) { this.name = name; } public void performFly() { flyBehavior.fly(name); } public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } }
然后定义FlyBehavior接口
public interface FlyBehavior { public void fly(String name); }
然后定义实现FlyBehavior的类
public class FlyWithWings implements FlyBehavior { public void fly(String name) { System.out.println(name + ": I can fly with wings"); } }
最后使用xml文件来注入两个类的依赖关系,使用ref相当于调用了setFlyBehavior,从而动态得设置了Duck的飞行行为,如此一来,降低了Duck和FlyBehavior之间的依赖关系,同时可以很方便的注入新的飞行行为,比如FlyNoWay。。。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id = "flyBehavior" class = "FlyWithWings"> <!-- <bean id = "flyBehavior" class="FlyNoWay"> --> </bean> <bean id = "duck" class="DuckImpl"> <constructor-arg value="Rubber Duck"></constructor-arg> <property name = "flyBehavior" ref = "flyBehavior"/> </bean> </beans>
1、SpringMVC请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
2、DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller。
3、DispatcherServlet请请求提交到目标Controller。
4、Controller进行业务逻辑处理后,会返回一个ModelAndView。
5、Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象。
6、视图对象负责渲染返回给客户端。
Spring特点:
1、轻量级:轻量级是针对重量级容器(EJB)来说的,Spring的核心包就不到1M大小,而使用Spring的核心包所需的资源也很小,所以可以在小型设备中使用。
2、非入侵式:Spring目标是一个非入侵式的服务框架。原因是所有框架都是提供大量的功能供用户去使用,从而简化开发时间和成本,但由于大量的使用了框架的API,使应用程序和框架发生了大量的依赖性,无法从框架中独立出来,更加无法使程序组件在其他程序中使用。
3、容器:Spring提供了容器功能,容器可以管理对象的生命周期、对象与对象间的关系、我们可以通过编写XML来设置对象关系和初始值,这样容器在启动之后,所有的对象都直接可以使用,不用编写任何编码来产生对象。
其实使用Spring的好处还是很多的,Spring可以降低各种框架的使用难度,是Java程序员日常工作的好帮手,尤其是目前常用的Java组合框架(SSH、SSM)都离不开Spring,并且Spring利用依赖注入特性来降低两个类之间的耦合,从而提高代码的质量。最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。
推荐阅读: