MVC思想、Spring层级代码、AOP

spring aop实际开发中怎么用,Spring Boot整合AOP,spring boot加spring mvc一起使用aop,项目中使用aop aop、spring boot、spring 阅读详情

MVC设计思想 

概念:

M :Model 数据层 数据处理/数据的持久化

V :View 视图层 前端页面相关的内容 (看到的内容)

C :Control 控制层 控制数据的流转的过程

在这里插入图片描述

MVC思想实现就是层级代码结构 

Spring层级代码结构

层级划分

1.Contorller层:控制层 主要实现与前端页面的交互

2.Service层:业务层 主要实现数据的处理(业务最多)

3.Mapper层:持久层 与数据库连接,交互数据行为

4.POJO: 前端传来数据包装成pojo对象进行处理

在这里插入图片描述

规则:

1.属性是私有的,方法是共有的,属性使用包装类

2.写代码要从底层往上写,@autoxxx和@Component配套使用

3.被调用者才有接口和实现类,因为controller是与前端相交互,在后端无人调用,所以不需要接口和实现类

编辑POJO

package com.jt.demo10.pojo;
//pojo的作用:pojo的对象一般实现数据传递的
import java.io.Serializable;
//要求对象序列化
// 作用:1.保证数据按照正常格式输出   2.在多线程条件下,共享数据必须序列化
public class User implements Serializable {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

 为社么pojo中使用包装类?

举个例子,在做金融业务时,如果系统出现异常,返回的为系统默认值,那么在包装类中,会返回null,而基本数据类型,如double中,会返回0.0。那么,对于这其中来说,系统拿到null值会直接报错,阻断程序运行;但是如果是0.0,那么系统会继续运行返回错误值。

 编辑Mapper层(@Repository)

package com.jt.demo11.mapper;

import com.jt.demo11.pojo.User;

public interface UserMapper {
    void addUser(User user);
}

实现接口,用 @repository管理实现接口的对象

package com.jt.demo11.mapper;

import com.jt.demo11.pojo.User;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

//@Component
@Repository
public class UserMapperImpl implements UserMapper {
    @Override
    public void addUser(User user) {
        System.out.println("完成用户入库操作:"+user.getName());
    }
}

 编辑Service层(@Service),

   @Autowired
    private UserMapper userMapper;

解释:因为service层要调用mapper层的属性,所以需要创建mapper对象,用@Autowired 注入属性

package com.jt.demo11.service;

import com.jt.demo11.pojo.User;

public interface UserService {
    void addUser(User user);
}

 想调用usermapper的属性,需要先将属性注入,注入是面向接口的(DI)

package com.jt.demo11.service;

import com.jt.demo11.mapper.UserMapper;
import com.jt.demo11.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

    //想调用usermapper的属性,需要先将属性注入,注入是面向接口的(DI)
    @Autowired
    private UserMapper userMapper;

    @Override
    public void addUser(User user) {
        userMapper.addUser(user);
    }
}

 编辑Controller层(@Controller)

package com.jt.demo11.controller;

import com.jt.demo11.pojo.User;
import com.jt.demo11.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    public void addUser(){
        User user=new User();
        user.setId(101);
        user.setName("春");
        user.setAge(2022);
        user.setSex("男");
        userService.addUser(user);
    }

}

 配置类

package com.jt.demo11.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.jt.demo11")
public class SpringConfig {
}

 测试类

package com.jt.demo11;

import com.jt.demo11.config.SpringConfig;
import com.jt.demo11.controller.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestMVC {
    public static void main(String[] args) {
        //创建容器对象,加载配置类
        ApplicationContext context=new AnnotationConfigApplicationContext(SpringConfig.class);
        //从容器中调用对象
        UserController userController = context.getBean(UserController.class);
        //调用对象的属性
        userController.addUser();

    }
}

代码加载流程

AOP

概念:

面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术,AOP是OOP的延续,

作用:

利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

IOC-DI/AOP之间的区别

IOC-DI是对象之间的解耦合,AOP是方法之间的解耦合

代码开发

创建项目:

在这里插入图片描述

 清除多余的文件

在这里插入图片描述

动态代理分类

1.JDK动态代理

a.JDK动态代理是JDK源码提供的,无需导入额外的jar包.

b.JDK代理对象要求实现和被代理者相同的接口

c.JDK代理创建速度快,运行时稍慢

在这里插入图片描述

代码实现

代码分布

配置类

package com.jt.demo01.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.jt.demo01")
public class SpringConfig {

}

目标类

package com.jt.demo01.service;

public interface UserService {
    void addUser();
}
package com.jt.demo01.service;

import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Override
    public void addUser() {
        System.out.println("新增用户成功");
    }
}

代理机制实现

InvocationHandler()底层代码:
public interface InvocationHandler {
public Object invoke(Object proxy, Method method, Object[] args)
        throws Throwable;
}

所以调用时需要创建一个新的接口实现类,并且实现里面的方法invoke()

package com.jt.demo1.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JDKProxy {
    //object是lang包中的
    public static  Object getProxy(Object target){
        //获取目标对象的类加载器,      类加载器:将class加载到java运行机制中
        ClassLoader loader=target.getClass().getClassLoader();
        //获取接口数组
        Class<?>[] interfaces = target.getClass().getInterfaces();
        //获取处理器对象,将代理对象扩展的内容写到处理器中
        InvocationHandler h= getInvocationHandler(target);
        //创建代理对象
        return Proxy.newProxyInstance(loader,interfaces,h);
    }
    //InvocationHandler()
    public static InvocationHandler getInvocationHandler(Object target){
        return new InvocationHandler() {
            @Override
            //代理机制调用目标方法
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("事务开始");
                //传入目标对象target
                Object result = method.invoke(target, args);
                System.out.println("事务提交");
                return result;
            }
        };
    }
}

 测试类

package com.jt.demo01;

import com.jt.demo01.config.SpringConfig;
import com.jt.demo01.proxy.JDKProxy;
import com.jt.demo01.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestTx {
    public static void main(String[] args) {
        ApplicationContext context=new AnnotationConfigApplicationContext(SpringConfig.class);
        //获取目标对象 实现UserService接口
        UserService target = context.getBean(UserService.class);
        //获取代理对象 实现UserService接口
        UserService proxy = (UserService) JDKProxy.getProxy(target);
        proxy.addUser();

    }
}

2.CGLIB动态代理

a.cglib动态代理需要导入额外的包,才能使用.

b.cglib 要求被代理者有无接口都可以, 但是cglib代理对象是目标对象的子类. (继承)

c.cglib创建代理对象时慢,但是运行期速度快.

在这里插入图片描述

注解

@repository:标识mapper层,效果和@component一样

@service:标识Service层,效果和@component一样

@Controller:标识Controller层,效果和@component一样

单词

repository:数据库

component:成分,部件(康po nr 特)

proxy:代理

Invocation:调用

handler:处理

invoke:调用

好家伙,面试官问我Spring?IOC+AOP+MVC+注解一套带走 前言: 天天用Spring却不知道原理是啥?AOP、IOC该怎么用,到底是怎么工作的?还有注解到底该怎么用?这些都是大家比较关心的问题,今天通过一个比较长的篇幅来一一讲解。不论是面试还是开发都是非常有用的,所以观众大大们能给个三连吗? 另外本人整理了20年面试题大全,包含spring、并发、数据库、Redis、分布式、dubbo、JVM、微服务等方面总结,下图是部分截图,需要的话点这里点这里暗号优快云。 一、依赖注入(Ioc) 1. 什么是 Spring IOC 容器? Spring 框架的核心 阅读详情

相关推荐

Spring-MVC-AOP

一,MVC设计思想, 如果将大量的代码写到一个方法中,后期维护不易,开发效率低 MVC说明: 1,M,model数据层,数据处理,数据的持久化 2,V,view 视图层,前端页面相关的内容 3,C,controller。控制层,控制数据的流转过程 二,层级代码结构 前提:在项目中代码需要松耦合,根据MVC指导想,后端代码进行了演化,演变为现在的层级代码结构。 1,Controller层,@RestController,控制层,主要实现与前端页面的交互!!! 2,Service层,@Se

m0_64736092的博客 358

简单理解Repository层、Service层、Controller层

简单谈谈关于控制器调用服务层、服务层调用仓储层的逻辑

weixin_37575140的博客 5452

菜鸟之路——Spring MVC(十四)Spring AOP

AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程。可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。   我们现在做的一些非业务,如:日志、事务、安全等都会写在业务代码中(

sjjsh2的博客 3344

AOP概述

什么是AOP 1.全称是 Aspect Oriented Programming 即: 面向切面编程。 2. 简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技 术,在不修改源码的基础上,对我们的已有方法进行增强。 AOP的作用及优势 作用:在程序运行期间,不修改源码对已有方法进行增强 优势: 减少重复代码 提高开发效率 维护方便 AOP的实现方式 使用动态代理技术 A...

weixin_46101397的博客 151

Spring MVC中基于AOP注解的日志管理实现详解

在Spring AOP的实际开发中,构建一个功能完整且可维护的切面类是实现横切关注点(如日志、权限校验、性能监控)的基础。本章将围绕@Aspect和@Component这两个核心注解展开,深入剖析如何通过它们协同工作来创建并注册切面组件,并进一步探讨其生命周期管理、执行顺序控制以及启用机制。理解这些内容对于构建高内聚、低耦合的企业级AOP模块至关重要。最佳实践是将通用切入点集中在一个专门的切面类中:@Aspect@Component其他切面可通过全限定名引用:@Aspect。

weixin_33205138的博客 1046

永不消逝的电波 -GSM空口信号的接收与解码

一开始接触软件无线电应该是从很早之前对RFID洗衣卡的解密开始的,后来接触人员定位,慢慢的打开了这样一扇大门。。。。 翻到之前做的GSM信号的接收解码,今天就对其过程做一个记录,也不是什么新颖的内容,权当是记录和回忆了。 对于GSM网络的相关内容,不是非常的熟悉,如有不正确的,欢迎批评指正。

Jack.Xu 专栏 1万+

Spring AOP的使用完整代码实现 (日志记录)-- 完整代码

此处做个简单的记录。 一:AOP的部分知识点 1、什么是AOP:AOP是面向切面编程,简单来说就是将某些重复出现的内容拎出来复用,抽取出来的这部分功能就是一个切面,在方法需要用到这个切面功能的时候,使⽤代理技术对⽅法进⾏增强。可用于日志记录 2、AOP动态代理的两种方式: CGLIB动态代理 + JDK动态代理(实现接口) 根据类是否实现接⼝来判断动态代理⽅式: 如果实现接⼝会使⽤ JDK 的动态代理,JDK动态代理通过反射来接收被代理的类,核⼼是 InvocationHandler 接⼝和 Proxy 类

qq_41219586的博客 2155

Robocopy 参数进阶:/MIR 镜像同步与 /PURGE 删除操作的风险规避指南

本文深入解析Robocopy的/MIR镜像同步与/PURGE删除操作的高级用法及风险规避策略。通过实际案例和四重防护机制,指导用户安全实现目录同步,避免数据丢失风险,特别适用于远程主机间的数据复制与备份场景。

weixin_33462927的博客 356

JavaWeb开发技术—MVC开发模式—代码分层—0001

MVC开发模式的重要概念及在项目中的使用: 1.什么是MVC开发模式 2.为啥要使用MVC模式 3.如何在项目使用MVC模式 本文中加粗红色最好熟记  什么是MVC开发模式: 为啥要使用MVC模式 :        MVC是一种程序开发设计模式,它实现了显示模块与功能模块的分离、分层。它主要分模型、视图、控制器三层,其中M代表业务逻辑层,也就是软件开发的功能;V代表视图层,也就是...

Coder_Boy_的博客 927

H2O到OmniH2O细节解读,人形机器人遥操作的技术演进与哲学

摘要:CMU何泰然团队相继发表的H2O和OmniH2O论文为人形机器人遥操作领域带来突破。H2O首创Sim-to-Data方法,通过形态/动作重定向和特权筛选处理人类动作数据,PPO算法实现基础控制。OmniH2O改进为教师-学生蒸馏框架,采用DAgger算法增强泛化能力,并消除对线速度输入的依赖。这两项工作从概念验证到工程落地,建立了一套完整的动作学习范式,为具身智能研究提供了重要参考。

CyanNoah的博客 1389

血管分割中的直径平衡难题:从clDice到cbDice的演进与实践

本文探讨了血管分割中的直径平衡难题,详细分析了从clDice到cbDice的技术演进与实践。通过引入半径感知权重和边界对齐惩罚,cbDice在保持拓扑完整性的同时提升了几何敏感度,显著改善了细小血管的分割效果。文章还分享了在nnU-Net中实现cbDice的工程细节,包括GPU加速骨架提取和多任务损失组合策略,为医学影像分析提供了重要参考。

weixin_29170327的博客 243

SpringMVC框架各个层的介绍

一.首先,SpringMVC使用分层框架,分层是为了实现“高内聚,低耦合”,把问题划分开来,各个解决,易于控制,延展和分配资源,最重要有利于后期维护项目;MVC指的是model,view,controller;在SpringMVC编程中一般分为四层:1.表示层:(jsp、html 主要就是界面的展示)2.控制层:(Contoller、Action)控制界面跳转3.业务层:(Service)调用DA...

qq_39299341的博客 1万+

远程桌面连接失败?手把手教你解决CredSSP加密Oracle漏洞(Win10/Win11通用)

本文详细解析了Windows远程桌面连接因CredSSP加密Oracle漏洞安全更新导致的“身份验证错误”问题。文章从原理入手,提供了通过组策略编辑器(适用于专业版)和注册表编辑器(适用于家庭版)两种核心解决方案,指导用户将安全策略调整为推荐的“缓解”模式,以在保障安全的前提下恢复连接,并给出了高级脚本处理与安全最佳实践。

u6v7w8x的博客 724

02.springMVC设计思想及springAOP

MVC设计思想 历史问题:如果将大量的代码都写到一个方法中,后期维护不易 MVC说明: 1.M Model 数据层 数据处理/数据的持久化 2.V View 视图层 前端页面相关的内容(看到的内容) 3.C Control 控制层 控制数据的流转过程 层级代码结构 前提:在项目中代码需要松耦合,根据MVC指导思想,后端代码进行了优化,演变为现在的层级代码结构. 层级结构: 1.Controller层: 控制层,主要是用来实现与前端页面的交互!!! 2.Service层: 业务层,主要实现

guan_xfeng的博客 391

SAP BAPI调用避坑指南:处理MD61/MD62计划独立需求时,这些参数和返回值你必须检查

本文详细解析了SAP BAPI调用中处理MD61/MD62计划独立需求的关键参数和返回值检查要点,包括版本控制、日期类型和删除标记等核心参数设置,以及常见错误排查和高级调试技巧,帮助开发者高效管理需求计划数据。

weixin_30316097的博客 611

基于qiime2的16S数据分析全流程:从导入数据到下游分析一条龙

基于qiime2的16s测序数据分析分析激活qiime环境我已经把上面这句代码放在了.bashrc里面,因此激活qiime2环境只需要运行activate_qiime即可/bin/bash# 设置目录路径# 输出表头 echo -e "sample-id\tforward-absolute-filepath\treverse-absolute-filepath"# 遍历_R1和_R2文件do # 检查R1文件是否存在then# 获取样本ID(去掉_R1.fastq.gz)

2301_76771985的博客 5524

spring的几大核心思想(aop、ioc、DI、mvc)

IOCioc是什么ioc的意义ioc在流程中的体现ioc的具体加载流程spring ioc与springmvcioc的关系涉及到的设计模式DI什么是DI什DIgetBean()createBeanInstance() populateBean()AOPAOP中的几个概念 AOP的几种配置方式注解配置配置文件配置AOP源码阅读心得spring mvcspring mvc的处理流程spring mvc九大组件HanderMappingsHandlerAdapte

路辉的博客 1921

【数据集8】全球人口数据WorldPop详解

全球人口数据WorldPop详解

WW、forever的博客 7881

Spring AOP

随着 Spring 轻量级开发框架的流行,Spring 生态圈出现了 Spring MVC 框架, Spring MVC 是当前最优秀的 MVC 框架。AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。但是,当切面太多的话,最好选择 AspectJ ,它比 Spring AOP 快很多。

2401_86844317的博客 1466

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring,Spring MVC、Mybatis和Spring boot(知识点总结)

Spring,Spring MVC、Mybatis和Spring boot(知识点总结)

qq_43655412的博客 3540

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深入解析 Spring 核心特性:MVC、AOP 与 IOC

在当今的 Java 企业级开发领域,Spring 框架占据着举足轻重的地位。它为开发者提供了一系列强大的工具和特性,极大地简化了复杂应用程序的开发过程。其中,Spring MVC、Spring AOP 和 Spring IOC 更是 Spring 框架的核心支柱,它们分别在 Web 应用开发、横切关注点处理以及依赖管理方面发挥着不可替代的作用。深入理解这些特性对于构建高效、可维护且健壮的 Java 应用程序至关重要。本文将对 Spring MVC、Spring AOP 和 Spring IOC 进行全面且详

guihong004的博客 968

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring MVC和Spring配置AOP

1.首先Spring MVC和Spring是两个东西,配置文件是分开的,配置文件的加载也是分开的。所以要想给Spring MVC的Controller添加AOP的话,得在Spring MVC的配置文件中配置,要想给Service和Repository添加AOP的话得在Spring的配置文件中配置。 2.以一个例子说明,有人配置了Service层的事务AOP之后,事务不起作用。原因是在Spring

来啊 快活啊 6212

Spring框架:Spring Core、Spring AOP、Spring MVC、Spring Boot、Spring Cloud等组件的基本原理及使用

Spring框架是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,它提供了全面的基础设施建设,以支持开发Java应用程序。Spring框架的组件众多,每个组件都有其独特的基本原理和使用方式。

牛马日常踩坑记录 1755

Spring Aop

Spring MVC:需要在XML配置中手动添加来启用AOP。:通过引入依赖,启用AOP功能,简化了配置过程。这种设计让Spring Boot提供了一种更为简便和现代的开发体验,减轻了开发者的负担。每种方案都有其适用的场景和优劣所在。大部分情况下,将方法拆分到不同的 Service 中是最佳实践,它能够保持代码的清晰性和可维护性。在复杂的应用中,可以根据具体的需求考虑其他方法,但在选择方案时要注意事务管理的影响。

会写Bug的攻城狮 2360

Spring、Spring MVC、Spring Boot 有何不同?

Spring 是整个体系的基础框架,提供了 IoC(控制反转)和 AOP(面向切面编程)等核心机制,用于管理对象、依赖和事务,是所有模块运行的地基;Spring MVC 建立在 Spring 之上,专注于 Web 层开发,通过 DispatcherServlet 实现请求分发、控制逻辑与视图渲染分离,让 Web 开发结构化、清晰;而 Spring Boot 则是在两者的基础上进行整合与封装,提供自动配置、起步依赖和内嵌服务器,大幅减少配置工作,使得开发者无需关心底层细节即可快速构建和运行应用。

m0_73341242的博客 940

MVC,Spring MVC

模型-视图-控制器(MVC)是⼀个众所周知的以设计界⾯应⽤程序为基础的设计思想。它主要通过分离 模型、视图及控制器在应⽤程序中的⻆⾊将业务逻辑从界⾯中解耦。通常,模型负责封装应⽤程序数据 在视图层展示。视图仅仅只是展示这些数据,不包含任何业务逻辑。控制器负责接收来⾃⽤户的请求, 并调⽤后台服务(service或者dao)来处理业务逻辑。处理后,后台业务层可能会返回了⼀些数据在视 图层展示。控制器收集这些数据及准备模型在视图层展示。

2201_76034461的博客 859
上一篇: Spring ICO和DI
下一篇: spring AOP(续)
五八个
博客等级 码龄8年 638粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值