论述题 8.  请简要介绍Spring MVC和AOP。
【正确答案】以下将分别对Spring MVC、IoC、AOP进行解释说明。
   (1)SpringMVC
   Spring MVC是在Spring框架上发展起来的框架,它提供了构建Web应用程序的全功能MVC模块,使用了Spring可插入的MVC架构,可以自由地选择各个模块所使用的架构,非常灵活。例如可以选择使用内置的Spring Web框架,也可以选择使用Struts的Web框架。通过策略接口,Spring框架是高度可配置的。它包含多种视图技术,例如Java ServerPages(JSP)技术和Velocity模板引擎等。对于SpringMVC框架而言,它并不知道具体使用了哪个视图。SpringMVC把控制器、模型、分派器以及处理程序对象的角色进行了分离,因此,Spring MVC有更好的可定制性。
   (2)AOP
   AOP(Aspect Oriented Programming,面向切面编程)是对面向对象开发的一种补充,它允许开发人员在不改变原来模型的基础上动态地修改模型从而满足新的需求。例如,在不改变原来业务逻辑模型的基础上,可以动态地增加日志、安全或异常处理的功能。
   下面介绍一个在Spring中使用AOP编程的简单例子。
   1)创建一个接口以及实现这个接口的类。TestAOPIn.java内容如下:
   public interface TestAOPIn{
   public void doSomething();
   TestAOPImpl.java内容如下:
   public class TestAOPImpl implements TestAOPIn{
   public void doSomething(){
   System.out.println("TestAOPImpl:doSomething");
   }
   }
   2)配置SpringConfig.xml,使得这个类的实例化对象可以被注入到使用这个对象的Test类中。
   <?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="testAOPBean"class="org.springframework.aop.framework.ProxyFactoryBean">
   <property name="target">
       </property>
   </bean>
   </beans>
   3)在完成配置文件后,编写测试代码如下:
   import org.springframework.context.AppIicationContext;
   import org.springframework.context.support.FileSystemXmlApplicationContext;
   public class Test{
   public static void main(String[]args){
   ApplicationContext ctx=new FileSystemXmlApplicationContext("SpringConfig.xml");
   TestAOPIn t=(TestAOPln)ctx.getBean("testAOPBean");
   t.doSomething();
   }
   }
   程序输出结果为:
   TestAOPImpl:doSomething
   当编写完这个模块后,开发人员需要增加对doSomething()方法调用的跟踪,也就是说,要跟踪该方法,了解该方法什么时候被调用以及什么时候调用结束等内容。当然,使用传统的方法也可以实现该功能,但是会产生额外的开销,即需要修改已存在的模块。所以,可以采用如下的方式来实现这个功能。
   public class TestAOPlmpl implements TestAOPln{
   public void doSomething(){
   System.out.println("beginCall doSomething");
   System.out.println("TestAOPImpl:doSomething");
   System.out.println("endCall doSomething");
   }
   此时可以采用AOP的方式来完成,它在不修改原有模块的前提下可以完成相同的功能。实现原理如图所示。
   
【答案解析】