springMVC(一):初识springMVC
什么是MVC
Model:数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为), 不过现在一般都分离开来:Value Object(数据Dao) 和服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
View:负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西
Controller(调度员): 接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图, 由视图负责展示。也就是说控制器做了个调度员的工作。
最常用的MVC:(Model)JavaBean +(view) Jsp +(Controller) Servlet
Model1时代
分为:视图层V和模型层M;由视图层的view来控制分发数据并展示给用户
缺点:JSP职责不单一,过重,不便于维护
Model2时代(MVC延续至今)流程:分为了Controller,Model,View
用户发请求
Servlet接收请求数据,并调用对应的业务逻辑方法
业务处理完毕,返回更新后的数据给se ...
spring(十一):transaction
Spring在不同的事务管理API之上定义了一个抽象层,使得开发人员不必了解底层的事务管理API就可以使用Spring的事务管理机制。Spring支持编程式事务管理和声明式的事务管理。
编程式事务:
将事务管理代码嵌到业务方法中来控制事务的提交和回滚(就是在Impl中加入try/catch)
缺点:必须在每个事务操作业务逻辑中包含额外的事务管理代码,会导致代码量变大
声明式事务:AOP织入实现(推荐)
一般情况下比编程式事务好用。
将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理;
将事务管理作为横切关注点,通过aop方法模块化。Spring中通过Spring AOP框架支持声明式事务管理。
声明式事务首先要引入约束:
123xmlns:tx="http://www.springframework.org/schema/tx"http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd
然后就可以用spring配置声明 ...
spring(十):整合mybatis
方式一:mybatis-spring导入相关的包
Junit
mybatis
MySQL
spring相关
aop织入
mybatis-spring 【new】
12345678910111213141516171819202122232425262728293031323334353637383940414243<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> < ...
spring(九):aop
什么是aop
是通过预编译的方式和运行期动态代理实现程序功能的统一维护的一种技术。
AOP在Spring中的作用提供声明式事务:允许用户自定义切面
横切关注点:跨越应用程序多个模块的方法或功能。即:与我们逻辑无关的,但是我们需要专注的部分,就是横切关注点。如:日志,安全,缓存,事务等等
切面(aspect):横切关注点被 模块化 的特殊对象。即:它是一个类
通知(advice):切面必须要完成的工作。即:它是类中的一个方法
目标(target):被通知的对象
代理(proxy):向目标对象应用通知之后创建的对象
切入点(PointCut):切面通知 执行的 “地点” 的定义
连接点(joinPoint):与切入点匹配的执行点
SpringAOP中,通过Advice定义横切逻辑,Spring中支持5种类型的Advice:即AOP在不改变原有代码的情况下,去增加新的功能。
使用spring实现AOP使用AOP织入,需要导入一个依赖包
12345<dependency> <groupId>org.aspectj</groupId> < ...
spring(八):proxy
代理模式,springAOP的底层原理,代理模式又分为静态代理和动态代理
静态代理角色分析:
抽象角色: 一般会用接口或抽象类来实现(租赁房子这个业务)1234//接口中有一个方法,租房子的行为,房东和中介都要去实现它public interface Rent { public void rent();}
真实角色: 被代理的角色(房东)1234567//房东(真实角色),只关注真实业务;租房子,而不用去关注一些公共的业务:比如看房子,签合同public class Host implements Rent{ @Override public void rent() { System.out.println("房东出租房子"); }}
代理角色: 代理真实角色的角色(中介) 代理真实角色后,我们一般会做一些附属操作12345678910111213141516171819202122232425262728293031//中介(代理角色),用来实现一些公共的业务,比如看 ...
spring(七):javaConfig
我们现在可以完全不使用Spring的xml配置,全权交给Java来做
javaConfig是Spring的一个子项目,在Spring4之后,他成为了一个核心功能
具体实现
编写一个配置类123456789101112//@Configuration就是声明当前类是一个配置类,相当于之前的beans.xml,有了这个类就不用在去配置beans.xml// 这个类也会Spring容器托管,注册到容器中,因为它本来就是一个@Component@Configurationpublic class MyConfig { // @Bean注册一个bean,就相当于我们之前写的一个bean标签 // 这个方法的名字,就相当于bean标签中id属性 // 这个方法的返回值,就相当于bean标签中的class属性 @Bean public User getUser(){ return new User(); }}
这样我们就能在测试类中得到这个配置文件中配置的得到对象的方法,与之前不同的是,使用的是Annotati ...
spring(六):annotation
在Spring4之后,要使用注解开发,必须要保证aop的包已经导入
使用注解需要导入约束,配置注解的支持
12345678910111213<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ...
spring(五):autowired
自动装配是Spring满足bean依赖一种方式
Spring会在上下文中自动寻找,并自动给bean装配属性
在Spring中有三种装配的方式:
在xml中显式的配置(使用依赖注入di)
在java中显式配置(省去xml文件,编写一个javaconfig类)
隐式的自动装配bean【重要】
测试环境搭建:
创建一个实体类,一个人有俩宠物
12345public class People { private Cat cat; private Dog dog; private String name;}
xml配置12345678910111213141516<beans> <!--要现在spring容器注册 对象属性对应的类,才能在下面自动装填--> <bean id="cat" class="com.hanser.pojo.Cat"/> <bean id="dog" class="com.hanser.pojo ...
spring(四):di
di:依赖注入
依赖:bean对象的创建依赖于容器
注入:bean对象中的所有属性,由容器来注入
构造器注入前面已经介绍过,参考spring(三):配置文件配置
set方式注入【重点】环境搭建
一个包含多种类型属性的类
12345678910111213141516package com.hanser.pojo;import java.util.*;@Data // lombok的一个注解,用来自动生成get,set,toString,hashCode方法public class Student { private String name; private Address address; private String[] books; private List<String> hobbies; private Map<String, String> card; private Set<String> games; private Properties info; private S ...
spring(三):配置文件配置
bean标签IOC容器创建对象的方式:
使用无参构造创建对象,默认 (用无参构造创建一个对象,然后调用它的set方法,实现属性的注入)
使用有参构造创建对象。
12345678910 <!--IOC默认的是调用无参构造,设置属性需要用到set方法,所以如果没有无参构造或set方法会报错 可以自己实现有参构造 1.<constructor-arg index="0" value="hanser"/>,index是属性的下标 2.<constructor-arg type="java.lang.String" value="hanser" /> type是属性的类型,不建议使用,如果有多个相同类型的参数会不方便 3.<constructor-arg name="name" value="hanser"/> 直接通过参数名 -->< ...