IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring进阶(一)自定义IOC&AOP框架 -> 正文阅读

[Java知识库]Spring进阶(一)自定义IOC&AOP框架

一. Spring概述

Spring概述_舞鹤白沙编码日志-CSDN博客

Spring集成web环境_舞鹤白沙编码日志-CSDN博客

Spring的事务_舞鹤白沙编码日志-CSDN博客

Spring JDBCTemplate & 声明式事务_舞鹤白沙编码日志-CSDN博客

二.Spring核心思想 IOC&AOP

AOP概述_舞鹤白沙编码日志-CSDN博客

初识IOC_舞鹤白沙编码日志-CSDN博客

三. 手写实现IOC-银行转账案例

(一)案例介绍

1. 银行转账案例界面

2. 银?转账案例表结构

(二)案例代码基础调用关系图

通过对上图的解析存在以下两个问题:
(1) service 层实现类在使? dao 层对象时,直接在TransferServiceImpl 中通过 AccountDao accountDao = new JdbcAccountDaoImpl() 获得了 dao 层对 象,然??个 new 关键字却将 TransferServiceImpl dao 层具体的?个实现类 JdbcAccountDaoImpl 耦合在了?起。(需要融入IOC编程思想将两个对象之间通过NEW的依赖交给第三方bean工厂)
(2) service 层代码没有进?事务控制,如果转账过程中出现异常,将可能导致
数据库数据错乱,后果可能会很严重,尤其在?融业务。(需要在service层的业务逻辑中建立事务控制,并且采用AOP切面编程思想将事务控制代码从业务逻辑代码中剥离)

(三)融入IOC及AOP核心编程思想后的调用关系

1. 融入IOC编程思想后的调用关系图

?从上图解析不难得出以下几点:

(1)把每个类的全限定类名配置在xml中。

(2)使用工厂来通过反射技术生产对象,工厂模式是解耦非常好的一种方式。

(3)创建ProxyFactory工厂用来生产TransferServiceImpl代理对象,并在生产代理对象过程中强化被代理对象的业务逻辑,从切面增加事务控制。而Servlet则通过ProxyFactory获取到增强的TransferServiceImpl被代理对象。

(4)ConnectionUtils同时被JdbcAccountDaoImpl及TransactionManager使用。

(5)需要其它类实例的类代码中只声明所需实例的接?类型,不出现 new 也不出现??类的字眼,声明?个变量并提供 set ?法,在反射的时候将所需要的对象注?进去。

2. 在Service层实现事务控制

service 层没有添加事务控制,怎么办?没有事务就添加上事务控制,?动控制 JDBC
Connection 事务,但要注意将 Connection 和当前线程绑定(即保证?个线程只有?个
Connection ,这样操作才针对的是同?个 Connection ,进?控制的是同?个事务)

?创建ConnectionUtils工具类来解决上述问题。

3. 融入AOP核心思想后的调用关系图

(四)案例开发代码示例

1. 前端代码示例

index.html代码示例_舞鹤白沙编码日志-CSDN博客

web.xml代码示例_舞鹤白沙编码日志-CSDN博客

jquery-3.4.1.min.js代码示例_舞鹤白沙编码日志-CSDN博客

2. 工具类代码示例

JsonUtils类代码示例_舞鹤白沙编码日志-CSDN博客

DruidUtils类代码示例_舞鹤白沙编码日志-CSDN博客

ConnectionUtils类代码示例_舞鹤白沙编码日志-CSDN博客

TransactionManager类代码示例_舞鹤白沙编码日志-CSDN博客

?3. pojo实体类代码示例

pojo实体类代码示例_舞鹤白沙编码日志-CSDN博客

4. 工厂类代码示例

BeanFactory类代码示例_舞鹤白沙编码日志-CSDN博客

ProxyFactory类代码示例_舞鹤白沙编码日志-CSDN博客

5. beans.xml代码示例

beans.xml代码示例_舞鹤白沙编码日志-CSDN博客

6. servlet层代码示例

TransferServlet类代码示例_舞鹤白沙编码日志-CSDN博客

7. service层代码示例

service层代码示例_舞鹤白沙编码日志-CSDN博客

8. dao层代码示例

dao层代码示例_舞鹤白沙编码日志-CSDN博客

9. pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.lagou.edu</groupId>
  <artifactId>lagou-transfer</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>lagou-transfer Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>


  <dependencies>
    <!-- 单元测试Junit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>

    <!-- mysql数据库驱动包 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.35</version>
    </dependency>
    <!--druid连接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.21</version>
    </dependency>

    <!-- servlet -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- jackson依赖 -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.6</version>
    </dependency>

    <!--dom4j依赖-->
    <dependency>
      <groupId>dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6.1</version>
    </dependency>
    <!--xpath表达式依赖-->
    <dependency>
      <groupId>jaxen</groupId>
      <artifactId>jaxen</artifactId>
      <version>1.1.6</version>
    </dependency>
    <!--引入cglib依赖包-->
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>2.1_2</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- 配置Maven的JDK编译级别 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
          <source>11</source>
          <target>11</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>

      <!-- tomcat7插件 -->
      <!-- 注意:目前来说,maven中央仓库还没有tomcat8的插件 -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>8080</port>
          <path>/</path>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

9. 项目编码结构

四.所涉及扩展知识点-设计模式代码示例

(一)单例模式

单例模式代码示例_舞鹤白沙编码日志-CSDN博客

(二)工厂模式

简单工厂模式代码示例_舞鹤白沙编码日志-CSDN博客

工厂方法模式代码示例_舞鹤白沙编码日志-CSDN博客

(三)代理模式

静态代理代码示例_舞鹤白沙编码日志-CSDN博客

动态代理模式代码示例_舞鹤白沙编码日志-CSDN博客

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 13:44:53  更:2022-01-01 13:48:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:25:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码