「学习笔记」Spring--MVC框架

Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。

1. Spring MVC基本概念

1.1 Spring MVC 五大核心组件

Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。

「学习笔记」Spring--面向切面编程(AOP模块)

AOP(Aspect Oriented Programming):面向切面编程, 它是面向对象基础上发展来的技术,是面向对象更高层次的应用, 它可以在不修改原有代码的情况给组件增强功能。

1. AOP涉及到的概念

  • Aspect:切面,用来封装共通业务逻辑;其类叫切面类,其创建的对象叫切面对象。
  • JoinPoint:连接点,用来封装切面所要嵌入的位置信息的对象,(主要封装了方法信息)
  • Pointcut:切点,是一堆连接点的集合,后面会使用切点表达式来表述切点
  • Target:目标,要被切入共通业务逻辑的对象
  • Proxy:代理,被增强之后的目标对象就是代理
  • Advice:通知,时机,切面逻辑在目标方法执行之前调用,执行之后调用,目标方法前后,目标方法最终,目标方法出现异常

2. 编写AOP程序步骤

  1. 编写一个Sevice类,里面有登录和注册两个方法,然后使用Spring容器获取Service类对应的对象,调用登录和注册方法
  2. 在不修改登录和注册原有代码的情况下,让两个方法调用前输出******
    1. 添加aop的jar包到lib
    2. 编写一个类,定义共同业务逻辑
    3. 配置aplicationContext.xml,创建切面对象
    4. 配置aop:config,切面–>通知–>切点

3. 切点表达式

  1. Bean限定表达式
    • bean("容器内组件id"),支持通配符*,如:bean("*Dao")bean("acc*")
  2. 类型限定表达式
    • within("包名.类型"),要求表达式最后一部分必须是类型,如:com.dao.impl.类型com.dao.impl.*com.dao..*
  3. 方法限定表达式
    • execution("表达式"),可以有 权限修饰 返回值类型 方法名(参数类型)throws 异常,必须有:返回值类型 方法名()

4. 通知的五种类型

  1. <aop:before:前置通知,目标方法执行之前调用
  2. <aop:after-returning:后置通知,目标方法执行之后调用(目标方法出异常,通知方法无法执行)
  3. <aop:after-throwing:异常通知,目标方法出异常才调用
  4. <aop:after:最终通知,目标方法之后一定会执行
  5. <aop:around:环绕通知,目标方法执行前后都调用

5. 标注形式AOP步骤

  1. 建项目,添加jar包(ioc,aop),src下添加配置文件
  2. 编写一个Sevice类,里面有登录和注册两个方法
  3. 开启组件扫描,在类上打对应标注,创建Spring容器 测试逻辑
  4. 定义一个切面类,定义切面方法,并在容器中使用标注@Component创建切面对象
  5. 开启标注形式aop:<aop:aspectj-autoproxy proxy-target-class="true|false" />
  6. 使用切面对应的标注以及通知对应的标注结合切点表达式完成aop: @Aspect,@Before...

6. AOP 通知对应的标注

  1. @Before:前置通知,目标方法执行之前调用
  2. @AfterReturning:后置通知,目标方法执行之后调用(目标方法出异常,通知方法无法执行)
  3. @AfterThrowing:异常通知,目标方法出异常才调用
  4. @After:最终通知,目标方法之后一定会执行
  5. @Around:环绕通知,目标方法执行前后都调用

7. @Around具体用法

@Around既可以在目标方法之前织入增强动作,也可以在执行目标方法之后织入增强动作;

「学习笔记」Spring--事务管理

事务的基本概念:事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。

1. 事务的特性(ACID)

  • 事务的特性:原子性、一致性、隔离性、持久性
  • 原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性(Consistency):事务前后数据的完整性必须保持一致。
  • 隔离性(Isolation):多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离(数据库中相应的数据隔离级别,通过它避免事务间的冲突)。
  • 持久性(Durability):一个事务一旦被提交,它对数据库中数据的改变是永久性的,即使数据库发生故障也不应该对其有任何影响。

2. Spring提供事务管理的3个接口:

  1. PlatformTransactionManager:事务管理器,用来管理事务的接口,定义了事务的提交、回滚等方法。
  2. TransactionDefinition:事务定义信息(隔离级别、传播行为、是否超时、是否只读)。
  3. TransactionStatus:事务具体运行状态(事务是否提交,事务是否有保存点,事务是否是新事物等状态)。

Spring事务管理时,这三个接口是有联系的,Spring首先会根据事务定义信息TransactionDefinition获取信息,然后由事务管理器PlatformTransactionManager进行管理,在事务管理过程中,会产生一个事务的状态,这个状态就保存在事务具体运行状态TransactionStatus中了。

「学习笔记」Spring--JDBC详解

Spring对JDBC做了简化和封装;简化了DAO实现类编写;提供了基于AOP的声明式事务管理;对JDBC中异常做了封装,把原来检查异常封装成了继承自RuntimeException的异常(DataAcessException)。

1. 数据源配置

@Configuration
@ComponentScan("com.jdbc")
public class MyConfiguration {
    @Bean
    public DataSource mysqlDataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }
    @Bean
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(mysqlDataSource());
    }
}

也可以使用XML配置来实现配置效果:

「学习笔记」Spring--IoC注解实现

1. 回顾xml方式管理Java Bean

  1. 将一个Bean交由Spring创建并管理
    • <baen id="bean" class="包名.Bean"></baen>
  2. 获取Spring上下文
    • ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
  3. 获取Bean
    • Bean bean = app.getBean("bean", Bean.class);

2. 注解方式管理Java Bean

一、创建一个class配置文件

「学习笔记」Spring--IoC控制反转

Spring是一个开源的轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发的复杂性而诞生的,但现在已不止应用于企业服务。

  • IOC:Inversion Of Control(控制反转),构成Spring框架的核心基础

  • DAO:Data Access Object(数据 访问对象),Spring对JDBC访问数据库的简化和封装

  • WebMVC:Spring对Web部分(jsp,servlet,ajax)以及MVC设计模式的支持

  • AOP:是在面向对象的基础上发展来的更高级的技术

  • ORM:Object Relation Mapping(对象关系映射),以面向对象的思想来访问数据库

  • JEE:Java的消息服务,远程调用,邮件服务等

1. IoC(控制反转)

IoC:(Inversion of Control),控制反转:控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护。

0%