热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ssm关键步骤(2)

spring:1.pom.xml中的文件配置org.springframework

spring:


1.pom.xml中的文件配置

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
插件
<build>
<plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin>
</plugins>
</build>

2.spring的主配置文件

在 src/main/resources/目录现创建一个 xml 文件&#xff0c;文件名可以随意&#xff0c;但 Spring 建议的名称为 applicationContext.xml。
在这里插入图片描述
&#xff1a;用于定义一个实例对象。一个实例对应一个 bean 元素。
id&#xff1a;该属性是 Bean 实例的唯一标识&#xff0c;程序通过 id 属性访问 Bean&#xff0c;Bean 与 Bean 间的依赖关系也是通过 id 属性关联的。
class&#xff1a;指定该 Bean 所属的类&#xff0c;注意这里只能是类&#xff0c;不能是接口。


3.依赖注入

&#xff08;1&#xff09;set 注入
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
&#xff08;2&#xff09; 构造注入
构造注入是指&#xff0c;在构造调用者实例的同时&#xff0c;完成被调用者的实例化。即&#xff0c;使用构造器设置依赖关系。
在这里插入图片描述
标签中用于指定参数的属性有&#xff1a;
➢ name&#xff1a;指定参数名称。
➢ index&#xff1a;指明该参数对应着构造器的第几个参数&#xff0c;从 0 开始。不过&#xff0c;该属性不要也行&#xff0c;
但要注意&#xff0c;若参数类型相同&#xff0c;或之间有包含关系&#xff0c;则需要保证赋值顺序要与构造器中的参数
顺序一致。

对于引用类型属性的注入&#xff0c;也可不在配置文件中显示的注入。可以通过为标签设置 autowire 属性值&#xff0c;为引用类型属性进行隐式自动注入&#xff08;默认是不自动注入引用类型属
性&#xff09;。根据自动注入判断标准的不同&#xff0c;可以分为两种&#xff1a;


  • byName&#xff1a;根据名称自动注入
  • byType&#xff1a; 根据类型自动注入
  • 在这里插入图片描述
    -在这里插入图片描述
    &#xff08;3&#xff09;基于注解的注入
    对于 DI 使用注解&#xff0c;将不再需要在 Spring 配置文件中声明 bean 实例&#xff0c;需要在 Spring 配置文件中配置组件扫描器&#xff0c;用于在指定的基本包中扫描注解。
    在这里插入图片描述
    指定多个包的三种方式&#xff1a;
    1)使用多个 context:component-scan 指定不同的包路径
    在这里插入图片描述
    2)指定 base-package 的值使用分隔符
    分隔符可以使用逗号&#xff08;&#xff0c;&#xff09;分号&#xff08;&#xff1b;&#xff09;还可以使用空格&#xff0c;不建议使用空格。
    3)base-package 是指定到父包名
    需要在类上使用注解&#64;Component&#xff0c;该注解的 value 属性用于指定该 bean 的 id 值。
    另外&#xff0c;Spring 还提供了 3 个创建对象的注解&#xff1a;
    ➢ &#64;Repository 用于对 DAO 实现类进行注解
    ➢ &#64;Service 用于对 Service 实现类进行注解
    ➢ &#64;Controller 用于对 Controller 实现类进行注解
    这三个注解与&#64;Component 都可以创建对象&#xff0c;但这三个注解还有其他的含义&#xff0c;&#64;Service
    创建业务层对象&#xff0c;业务层对象可以加入事务功能&#xff0c;&#64;Controller 注解创建的对象可以作为处
    理器接收用户的请求。
    &#64;Repository&#xff0c;&#64;Service&#xff0c;&#64;Controller 是对&#64;Component 注解的细化&#xff0c;标注不同层的对
    象。即持久层对象&#xff0c;业务层对象&#xff0c;控制层对象。

4.面向切面编程(AOP)

AOP 底层&#xff0c;就是采用动态代理模式实现的。采用了两种代理&#xff1a;JDK 的动态代理&#xff0c;与 CGLIB的动态代理。
AspectJ 中常用的通知有五种类型&#xff1a;
&#xff08;1&#xff09;前置通知
&#xff08;2&#xff09;后置通知
&#xff08;3&#xff09;环绕通知
&#xff08;4&#xff09;异常通知
&#xff08;5&#xff09;最终通知
切入点表达式:execution(访问权限 方法返回值 方法声明(参数) 异常类型)
需要在pom文件中添加依赖&#xff1a;

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>

5.AspectJ 基于注解的 AOP 实现&#xff1a;

在这里插入图片描述
B、 Step2&#xff1a;定义切面类
在这里插入图片描述
在这里插入图片描述
D、Step4&#xff1a;注册 AspectJ 的自动代理
在定义好切面 Aspect 后&#xff0c;需要通知 Spring 容器&#xff0c;让容器生成“目标类&#43; 切面”的代理
对象。这个代理是由容器自动生成的。只需要在 Spring 配置文件中注册一个基于 aspectj 的
自动代理生成器&#xff0c;其就会自动扫描到&#64;Aspect 注解&#xff0c;并按通知类型与切入点&#xff0c;将其织入&#xff0c;并
生成代理
在这里插入图片描述
E、 Step5&#xff1a;测试类中使用目标对象的 id
在这里插入图片描述


  • &#64;Before 前置通知-方法有 JoinPoint 参数
  • &#64;AfterReturning 后置通知-注解有 returning 属性
  • &#64;Around 环绕通知-增强方法有 ProceedingJoinPoint
  • &#64;AfterThrowing 异常通知-注解中有 throwing 属性
  • &#64;After 最终通知

&#64;Pointcut 定义切入点&#xff1a;当较多的通知增强方法使用相同的 execution 切入点表达式时&#xff0c;编写、维护均较为麻烦。
AspectJ 提供了&#64;Pointcut 注解&#xff0c;用于定义 execution 切入点表达式。
在这里插入图片描述


6.spring集成mybatis

(1)在pom文件中添加依赖

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>

&#xff08;2&#xff09;mybatis.xml的配置
在这里插入图片描述
&#xff08;3&#xff09;主配置文件applicationcontext.xml
在这里插入图片描述


7.事务管理

通过&#64;Transactional 注解方式&#xff0c;可将事务织入到相应 public 方法中&#xff0c;实现事务管理。
采用spring实现注解的事务步骤&#xff1a;


  1. 声明事务管理器
    在这里插入图片描述
  2. 开启注解驱动
    在这里插入图片描述
  3. 业务层 public 方法加入事务属性
    在这里插入图片描述
    采用 AspectJ 的 AOP 配置管理事务
    Step1&#xff1a;maven 依赖 pom.xml
    新加入 aspectj 的依赖坐标

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>

Step2&#xff1a;在容器中添加事务管理器
在这里插入图片描述
Step3&#xff1a;配置事务通知
为事务通知设置相关属性。用于指定要将事务以什么方式织入给哪些方法。例如&#xff0c;应用到 buy 方法上的事务要求是必须的&#xff0c;且当 buy 方法发生异常后要回滚业务。
在这里插入图片描述
Step4&#xff1a;配置增强器
指定将配置好的事务通知&#xff0c;织入给谁。
在这里插入图片描述


推荐阅读
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 我有一个SpringRestController,它处理API调用的版本1。继承在SpringRestControllerpackagerest.v1;RestCon ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • 烤鸭|本文_Spring之Bean的生命周期详解
    烤鸭|本文_Spring之Bean的生命周期详解 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • ssm框架整合及工程分层1.先创建一个新的project1.1配置pom.xml ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • springMVC JRS303验证 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • Logback使用小结
    1一定要使用slf4j的jar包,不要使用apachecommons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~importorg.slf ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
author-avatar
继续不插电的名单
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有