首页 > 编程语言 > 详细

【总结】spring & springmvc

时间:2020-07-05 19:48:04      阅读:66      评论:0      收藏:0      [点我收藏+]

一.spring概述

1.spring体系结构

(1)核心容器(core container):由spring-core,spring-beans,spring-context和spring-expression(SpEL,Spring表达式语言,Spring Expression Language)等模块组成
(2)数据访问(data access):jdbc,orm(jpa,heribate),transactions
(3)web:web,web-mvc,web-socket
(4)其它:aop,AspectJ,测试模块(JUnit)

2.ApplicationContext三个常见实现类

(1).classPathXmlApplicationContext:加载类路径下的配置文件(要求配置文件必须在类路径下,不在的话就加载不了)
(2).FileSystemXmlApplicationContext:加载磁盘任意路径下的配置文件(必须有访问权限)
(3).AnnotationConfigApplicationContext:读取注解创建容器

3.BeanFactory和ApplicationContext区别?

ApplicationContext继承BeanFactory接口,是一种更高级的容器,提供了更多功能(Aop,国际化,消息发送)

区别:BeanFactory在启动的时候不会实例化Bean,从容器拿bean的时候才会实例化。ApplicationContext在启动的时候就把所有Bean实例化

二.ioc容器

1.ioc概念

ioc,反转控制,new实例不需要程序员去做而是交给容器来做。它是好处就是对象构建如果依赖非常多的对象,而且层次很深,外层对象构建时就会非常复杂。这时交给容器管理就会方便很多。

2.容器类型

①BeanFactory:最简单的容器,为依赖注入提供支持
②ApplicationContext:Application Context 是 BeanFactory 的子接口,也被称为 Spring 上下文。是更高级的容器

3.bean的作用域

设置:bean标签的scope属性

作用域 描述
singleton 单例
prototype 多例,每次从容器中调用Bean,都会返回新实例
request 每次HTTP请求都会创建新的Bean
session 同一个HTTP session共享一个Bean
global-session 作用域集群环境会话范围(全局会话)(负载均衡的时候)

4.ioc依赖注入方式

(1)构造方法注入

<bean id="userService" class="com.lyu.spring.service.impl.UserService">
	<constructor-arg ref="userDaoJdbc"></constructor-arg>
</bean>

(2)setter注入

<bean id="" class="">
    <property name="" value=""></property>
</bean>

(3)注解注入

<context:component-scan base-package=""></context:component-scan>

@component,@Controller,@Service,@Repository:注册某个类对象。value默认为首字母小写的类名

5.依赖装配方式

(1)Autowired是spring注解,默认ByType方式装配对象。有多个类型相同的实例,要考虑使用@Qualifier)。@Qualifier:在按照类型注入的基础上再按照ByName注入(要配合@Autowired使用)
(2)Resource是java注解,默认ByName方式装配对象

三.aop容器

1.aop概念

aop,面向切面编程,就是找出对多个对象产生公共影响的行为,封装成一个可重用的模块。这样可以减少代码重复,降低耦合度(可用于事务 日志等)

2.aop分类

aop的关键在于aop框架自动创建aop代理,分为静态代理(在编译阶段生成代理类),动态代理(spring aop)。spring框架采用动态代理
动态代理又有两种方式:JDK动态代理,cglib动态代理(当目标对象实现接口时用JDK动态代理,没有实现接口时用cglib代理)

3.aop相关术语

(1)连接点(Joinpoint):业务层中所有的方法
(2)切入点(PointCut):被增强的方法(使用execution匹配连接点得到切入点)

@Before("pt1()")  前置通知,在方法执行前执行
@After("pt1()")   后置通知, 在方法执行之后执行 
@AfterReturning("pt1()")  返回通知, 在方法返回结果之后执行
@Around("pt1()")  环绕通知, 方法执行前和执行后都会执行(时间记录)
@AfterThrowing("pt1()")  异常通知, 在方法抛出异常之后

(3)通知:前置,后置,异常,最终,环绕(环绕着明确的切入点方法调用)
(4)织入:把增强应用到目标对象的过程
(5)切面:切入点和通知的结合

4.aop配置

(1)配置spring开启注解aop支持

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

(2)配置切面(切入点+通知)


@Aspect
public class MyAspect {
	@Before("execution(public int top.biglin.spring.aop.impl.ArithmeticCalculatorImpl.*(int,int))")
    public void beforeMothod(JoinPoint joinPoint) {
        System.out.println("before The method");
    }
}

四.SpirngMVC

1.三层架构和mvc设计模式

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层、业务逻辑层、数据访问层。区分层次的目的即为了“高内聚低耦合”的思想。(高内聚是指一个模块只需要做好一件事)

mvc:model view controller,模型 视图 控制器。将模型和视图分离,通过控制器进行控制。降低耦合(一个数据模型可以由多种表现形式。eg:文件夹表现样式)

2.springmvc配置

(1)web.xml中配置dispatcherservlet

<!-- Spring MVC配置 -->
<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-servlet.xml</param-value>&nbsp; 默认
    </init-param>
    -->
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

(2)spring-servlet.xml配置

    <!-- 启用spring mvc 注解 -->
    <context:annotation-config />

    <!-- 设置使用注解的类所在的jar包 -->
    <context:component-scan base-package="controller"></context:component-scan>
  
    <!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/jsp/" p:suffix=".jsp" />

(3)@RequestMapping()注解

3.常见注解

(1)@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。包含6个属性:
①value: 指定请求的实际地址
②method: 指定请求的method类型(GET、POST、PUT、DELETE)
③consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
④produces: 指定返回的内容类型,仅当request请求头中包含该指定数据才返回(范围比consume大)
⑤params: 指定request中必须包含某些参数值时,才让该方法处理。
⑥headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

(2)@PathVariable
主要用于接收http://host:port/path/{参数值}数据。

(3)@RequestParam 主要用于接收http://host:port/path?参数名=参数值数据,这里后面也可以不跟参数值。

(4)@RequestBody
接收json格式的数据,并将其转换成对应的数据类型

4.springmvc流程

1、用户发送请求至前端控制器DispatcherServlet。
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView。
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、ViewReslover解析后返回具体View.
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户。

【总结】spring & springmvc

原文:https://www.cnblogs.com/muacheng/p/13248435.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!