spring MVC

 

1. spring基础知识

目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
  • 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以 在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道 的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。可以将简单的组件配置、组合成为复杂的应用.
  • 容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型 (prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互关联的
  • 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应 用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象 自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找 依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
  • 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计、事务、日志、参数校验等管理)进行内聚性的开发。它们并不意识其它的系统级关注点。

2.项目中如何体现Spring中的切面编程,举例说明

面向切面编程:主要是横切一个关注点,将一个关注点模块化成一个切面(@Aspect)。在切面上声明一个切入点(@Pointcut)和在切入点上执行的动作(@Around @Before @After)。
@Aspect
public class MyAspect {
    // 定义切入点。以描述需要在哪些对象的哪些方法上插入通知中定义的方法。
    @Pointcut("execution(* com.xx.xx.api..*.*(..)) && @annotation(com.xx.xxx.common.annotation.YEWURPC)")
    public void rpcPointcut() {
    }

    @Around("rpcPointcut()")
    public Object around(ProceedingJoinPoint point) {}
}

 3. 谈谈mvc的理解

MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式, 它强制性的把应用程序的输入、处理和输出分开。 MVC中的模型、视图、控制器它们分别担负着不同的任务。 视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用 户的输入。视图不进行任何业务逻辑处理。 模型: 模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提 供数据。这提高了应用程序的重用性 控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去 处理请求。 然后根据处理的结果调用相应的视图来显示处理的结果。 MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理, 并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现 给用户。
 

 

 

4.spring事务管理

Spring并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现。 
Spring事务管理器的接口是org.springframework.transaction.PlatformTransactionManager,通过这个接口,Spring为各个平台如JDBC、Hibernate等都提供了对应的事务管理器,但是具体的实现就是各个平台自己的事情了。
 
Public interface PlatformTransactionManager()...{  
    // 由TransactionDefinition得到TransactionStatus对象
    TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
    Void commit(TransactionStatus status) throws TransactionException;  
    Void rollback(TransactionStatus status) throws TransactionException;  
    }

项目中用到的Spring中的切面编程最多的地方:声明式事务管理。

a、定义一个事务管理器

<!-- transaction manager config -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dynamicDataSource" />
    </bean>
b、配置事务特性(相当于声明通知。一般在业务层的类的一些方法上定义事务) 
c、配置哪些类的哪些方法需要配置事务(相当于切入点。一般是业务类的方法上)

 

在Spring中,事务处理主要有两种方式

(1) 参数配置控制事务,在Application-Context.xml增加一个事务代理

(2) 代码控制事务 在程序中引入新的模版类,这个类封装了事务管理的功能
               count = new TransactionTemplate(transactionManager).execute(new TransactionCallback<Long>() {
                            @Override
                            public Long doInTransaction(TransactionStatus status) {
                                //插入系统操作记录表
                                try{}catch (Exception e){
                                    status.setRollbackOnly();
                                }
                            }
                        });

 

 

 5.spring 的优点

1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 

2.可以使用容易提供的众多服务,如事务管理,消息服务等 

3.容器提供单例模式支持 

4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 

5.容器提供了众多的辅助类,能加快应用的开发 

6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 

7.spring属于低侵入式设计,代码的污染极低 

8.独立于各种应用服务器 

9.spring的DI机制降低了业务对象替换的复杂性 

10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 

 

6.什么是DI机制

依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 。因此也称为依赖注入。 spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 

设置注入的优点:直观,自然 

构造注入的优点:可以在构造器中决定依赖关系的顺序。 

 

7.什么是AOP

面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面 

1.面向切面编程提供声明式事务管理 

2.spring支持用户自定义的切面 

8.aop框架具有的两个特征

1.各个步骤之间的良好隔离性 

2.源代码无关性 

面向切面编程(aop)是对面向对象编程(oop)的补充。面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。 

AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象, 是对应用执行过程中的步骤进行抽象,从而获得步骤之间的逻辑划分。 

 

posted @ 2018-01-05 19:24  daniel456  阅读(185)  评论(0编辑  收藏  举报