我爱编程

Spring

2017-02-13  本文已影响19人  zjlearn

1. 框架概述

1.1 目的

Spring的主要的目的是简化java开发:

1.2 核心技术

Spring中核心的功能由控制反转和切面编程实现。

1.2.1 控制反转IOC

控制反转(Inversion of Control ,Ioc)
所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护由外部容器来负责。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。

依赖注入就是指:在运行期间,有外部容器动态地将依赖对象注入到组件中(构造方法和set方法)

使用IOC的优势是:其降低组件之间的耦合度,实现软件各层之间的解耦.

在Spring中实现依赖注入有xml, javaconfig和annotation三种方式。

1.2.2 AOP

AOP是面向切面的,它使得业务逻辑和非业务逻辑分离,允许你把遍布应用各处的功能分离出来形成可重用的组件。
常用到的场景: 安全,日志,缓存等

面向切面编程往往被定义为促使软件系统实现关注点的分离一项技
术。系统由许多不同的组件组成,每一个组件各负责一块特定功能。
除了实现自身核心的功能之外,这些组件还经常承担着额外的职责。
诸如日志、事务管理和安全这样的系统服务经常融入到自身具有核心
业务逻辑的组件中去,这些系统服务通常被称为横切关注点,因为它
们会跨越系统的多个组件

概念:
通知: 即切面的工作。
Spring切面可以应用5种类型的通知:

1.2.2 使用

@Pointcut("execution(** concert.Performance.perform(..))")
public void performance() {}

@Before("performance()")
public void silenceCellPhones() {
    System.out.println("Silencing cell phones");
}

1.3 容器

之前的servlet中容器负责servlet的生成,调用和销毁的过程。在基于Spring的应用中,你的应用对象生存于Spring容器(container)中,Spring容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期,从生存到死亡(在这里,可能就是new到finalize())。

Spring容器并不是只有一个。Spring自带了多个容器实现,可以归为
两种不同的类型。

spring提供的应用上下文(最可能遇到的):

1.4 整体

Spring框架整体包括了核心容器部分,AOP模块部分,数据集成与访问,web与远程调用。
如图所示:


Paste_Image.png

2. Spring web

在先前的servlet的课程中,代码出现的问题:

Spring MVC

Spring MVC 是spring相关的web框架项目。其整体的工作流程和机制可以用下图表示:


Paste_Image.png

DispatcherServlet是Spring MVC的核心,其将请求转发给合适的控制器。
对于DispatcherServlet的配置和普通的servlet的配置相同,只不过此时DispatcherServlet是由spring中实现好的。

编写控制器

控制器逻辑上属于控制处理业务逻辑部分,在Spring中以bean的形式出现。所以可以使用@Controller注解来标注该控制器。

@Controller
public class HomeController {
    @RequestMapping(value="/", method=GET)
        public String home() {
        return "home";
        }
}

注意点:

Paste_Image.png

ViewResolver

spring框架中ViewResolver负责视图的解析工作,ViewResolver的整体的框架如下:(注:实现的ViewResolver未标注完)


Paste_Image.png

不同的视图解析器区别主要在于:面向的视图资源不同。

使用视图解析器时需要对其进行配置,如下:

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>

对于home视图将被解析为:/WEB-INF/jsp/home.jsp

参考:

  1. 《spring in action》
  2. http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#unit-testing-spring-mvc
上一篇下一篇

猜你喜欢

热点阅读