AOP(面向切面编程)基于注解方式配置

 不会注解的小伙伴看这里哦:Spring常用注解!!!-CSDN博客

pom.xml

 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.1.8.RELEASE</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.19</version></dependency></dependencies>

UserDaoImpl:

package com.by.dao;import org.springframework.stereotype.Repository;@Repository
public class UserDaoImpl implements UserDao {@Overridepublic void addUser(){System.out.println("insert into tb_user......");}
}

UserServiceImpl:

package com.by.service;import com.by.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic void addUser(){userDao.addUser();//System.out.println(8/0);}
}

MyLogActive:(增强类)

/** Copyright (c) 2020, 2024,  All rights reserved.**/
package com.by.advice;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;/*** <p>Project: Spring - MyLogAdvice</p>* <p>Powered by scl On 2024-01-05 15:04:11</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
@Component
@Aspect
public class MyLogAdvice {@Before("execution(* com.by.service.*.*(..))")public void before() {System.out.println("前置通知、。、");}@After("execution(* com.by.service.*.*(..))")public void after() {System.out.println("最终通知、、、");}@AfterReturning("execution(* com.by.service.*.*(..))")public void afterReturn(){System.out.println("后置通知");}@AfterThrowing("execution(* com.by.service.*.*(..))")public void afterThrowing(){System.out.println("异常通知");}@Around("execution(* com.by.service.*.*(..))")public void around(ProceedingJoinPoint joinPoint) {try {System.out.println("前环绕通知。。。");joinPoint.proceed();System.out.println("后环绕通知。。。");} catch (Throwable e) {throw new RuntimeException(e);}}
}

applicationContext.xml:

<?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:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--扫描com.by下的文件,将其添加到工厂--><context:component-scan base-package="com.by"></context:component-scan><!--aop,自动扫描注解--><aop:aspectj-autoproxy></aop:aspectj-autoproxy></beans>

测试:

/** Copyright (c) 2020, 2024,  All rights reserved.**/
package com.by.web;import com.by.service.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** <p>Project: Spring - Client</p>* <p>Powered by scl On 2024-01-05 15:01:34</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public class Client {public static void main(String[] args) {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = applicationContext.getBean("userServiceImpl", UserService.class);System.out.println(userService);userService.addUser();}
}

结果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/323901.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python从入门到网络爬虫(内置函数详解)

前言 Python 内置了许多的函数和类型&#xff0c;比如print()&#xff0c;input()等&#xff0c;我们可以直接在程序中使用它们&#xff0c;非常方便&#xff0c;并且它们是Python解释器的底层实现的&#xff0c;所以效率是比一般的自定义函数更有效率。目前共有71个内置函数&…

苹果Mac图像修图软件Photomator和Pixelmator Pro 有什么区别?

同为一个团队设计的Mac修图软件Photomator和Pixelmator Pro有哪些区别呢&#xff1f;有哪些不一样的功能&#xff1f; Photomator和Pixelmator Pro区别如下&#xff1a; 1、用途不同 Photomator 和 Pixelmator Pro 是两个功能强大的应用程序&#xff0c;具有两个不同的用途。…

Mysql 将表里的两列值数据互换

示例&#xff1a; 需要将表中的 两个订单号互换 方案&#xff1a; 将同一张表数据做 临时数据 和主表 做数据交互 。 update 表 as main, 表 as temp set main.bill_no temp.track_bill_no, main.track_bill_no temp.bill_no where main.id temp.id…

小程序购物商城搭建开发分析

小程序商城作为现代商业模式的重要组成部分&#xff0c;具有巨大的发展潜力和商业价值。通过搭建一个功能完善、用户友好的小程序商城&#xff0c;您将能够提供便捷的购物体验&#xff0c;吸引更多的用户并实现商业增长。在进行小程序商城开发搭建之前&#xff0c;我们需要对项…

利用C#实现贪吃蛇

说明 本文根据B站up主唐老狮的课程所学所记 目录 说明本文根据B站up主唐老狮的课程所学所记 UML面向对象七大原则总体实现目标单一职责原则&#xff08;SRP&#xff0c;Single Responsibility Principle&#xff09;开闭原则&#xff08;OCP&#xff0c;Open-Closed Principle…

RT-Thread学习

RT-Thread是以Apache License v2开源许可发布的物联网操作系统。 RT-Thread有十多年的历史&#xff0c;在开发过程中也放在Github上由大家协同开发&#xff0c;并发布一个个版本&#xff0c;导致不同人群面对多样的版本无从下手。 RT-Thread的版本/分支有以下几种可供选择&…

陀螺研究院发布《中国产业区块链生态图谱 2024版》

从发展实践来看&#xff0c;产业区块链在我国已历经了4年的高速发展&#xff0c;发展至今&#xff0c;我国区块链发展环境基本夯实&#xff0c;形成了技术突破与应用拓宽的创新土壤&#xff0c;围绕区块链为主体的产业链条不断纵深延伸&#xff0c;在基础设施支撑、融合创新拓展…

烟花燃放如何管控?智能分析网关V4烟火检测保障烟火安全

一、方案背景 随着元旦佳节的热潮退去&#xff0c;春节也即将来临&#xff0c;在众多传统的中国节日里&#xff0c;烟花与烧纸祭祀都是必不可少的&#xff0c;一方面表达了人们对节日的庆祝的期许&#xff0c;另一方面也是一种对故者思念的寄托。烟花爆竹的燃放不仅存在着巨大的…

Java异常和异常处理(主要是try-catch的掌握)

异常 1、异常介绍 &#xff08;1&#xff09;基本概念 Java语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”.(开发过程中的语法错误和逻辑错误不是异常) 快捷键&#xff1a; ctrlaltt&#xff0c;选中try-catch 执行过程中的异常可以分为两大类&#xff1a; …

Anaconda + Pytorch 超详细安装教程

Anaconda Pytorch 超详细安装教程 安装 Anaconda 略,自行百度即可 安装 Pytorch 虚拟环境 第一步 选择 env第二步 创建第三步 填写环境名称和选择 python 版本号 第四步 打开 https://pytorch.org/ 选择 pytorch 版本&#xff0c;我这里选择的是 GPU 版本 即 CUDA 11.8,也…

Unity 3D GridLayoutGroup3D 让子物体对齐,调整子物体间距

Unity 3D GridLayoutGroup3D 让子物体对齐&#xff0c;调整子物体间距 效果 介绍 GridLayoutGroup3D 脚本是一个用于在 Unity 3D 编辑器中创建 3D 网格布局的实用工具。主要用于在 Unity 编辑器中提供一种可视化的方式来设置和调整子物体的位置&#xff0c;同时支持删除脚本时…

LeetCode(39)组合总和⭐⭐

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。如…