SpringAOP的注解形式

SpringAOP的注解形式上一篇讲了配置文件形式的SpringAOP:Spring中的AOP以及切入点表达式和各种通知本篇继续看一下注解形式怎么去理解和应用AOP前几篇已经讲了不少AOP相关的知识,本篇不再赘述,直接用代码写一下注解形式的AOP举的例子还是前几篇的例子,只不过是用注解的形式去用一下AOPpackagecom.cj.study.spring.aop.annotation;public…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

SpringAOP的注解形式

铁子们,快扫码关注啦!或 wx搜索:“聊5毛钱的java”,关注可领取博主的Java学习视频+资料,保证都是干货

上一篇讲了配置文件形式的SpringAOP:Spring中的AOP以及切入点表达式和各种通知

本篇继续看一下注解形式怎么去理解和应用AOP

前几篇已经讲了不少AOP相关的知识,本篇不再赘述,直接用代码写一下注解形式的AOP

举的例子还是前几篇的例子,只不过是用注解的形式去用一下AOP

package com.cj.study.spring.aop.annotation;

public interface PersonService {
	
	public String savePerson();
	
	public void updatePerson();
	
	public void deletePerson();
	
}
package com.cj.study.spring.aop.annotation;

import org.springframework.stereotype.Repository;

//目标类
@Repository("personService")
public class PersonServiceImpl implements PersonService{
	
	//目标方法
	public String savePerson() {
		System.out.println("添加");
		return "保存成功!";
	}

	//目标方法
	public void updatePerson() {
		System.out.println("修改");
	}

	//目标方法
	public void deletePerson() {
		System.out.println("删除");
	}

}
package com.cj.study.spring.aop.annotation;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 *
 *  @Aspect + @Pointcut()这两个注解就相当于之前配置文件里下边的内容
 *  <aop:config>
 *		<aop:pointcut expression="execution(* com.cj.study.spring.aop.*.*(..))" id="perform"/>
 *  </aop:config>
 *  
 *  @Before()这个注解就相当于之前配置文件里
 *  <aop:aspect ref="myTransaction">
 *		<aop:before method="beginTransaction" pointcut-ref="perform"/>
 *	</aop:aspect>
 *  
 * @author caoju
 *
 */
//切面类
@Component("myTransaction")
@Aspect
public class MyTransaction {
	
	//这个 aaa() 方法没有其他作用,仅仅是用它来标明一下切入点表达式
	@Pointcut("execution(* com.cj.study.spring.aop..*.*(..))")
	public void aaa(){
		
	}
	
	//切面里的通知方法
	@Before("aaa()")
	public void beginTransaction(){
		System.out.println("开启事务 ");
	}
	
	//切面里的通知方法
	@After("aaa()")
	public void commit(){
		System.out.println("提交事务");
	}
	
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">

	<!-- 配置包扫描器,把目标类和切面类纳入到spring容器中管理 -->
	<context:component-scan base-package="com.cj.study.spring.aop.annotation" />	
	
	<!-- 启动aop的注解解析器 -->
	<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
	
</beans>
package com.cj.study.spring.aop.annotation;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AopAnnodationTest {
	@Test
	public void test(){
		ApplicationContext context = new ClassPathXmlApplicationContext("com/cj/study/spring/aop/annotation/applicationContext.xml");
		PersonService proxyPersonService = (PersonService) context.getBean("personService");
		String returnValue = proxyPersonService.savePerson();
		System.out.println(returnValue);
	}
}

打断点看下返回的是否是代理类

SpringAOP的注解形式

可以看到返回的是$Proxy,说明返回的是代理对象

看下最后的结果

SpringAOP的注解形式

以上就是以注解的形式用了一下AOP

需要知道的是:不管是配置文件的形式还是注解的形式,他们两种实现的功能是一样的

注解形式的可能比配置文件更抽象一点,但是你要清楚它做的事情和配置文件做的是一样的,只是形式上有差别。注解可以对比着配置文件去理解,我已经在代码里进行了注释

不管是配置文件还是注解,最终都要用反射来实现,关于反射和注解,我之前的文章也写过

Java中的反射机制介绍

Java中的注解以及自定义注解

感兴趣的小可爱,可以自行参考

铁子们,如果觉得文章对你有所帮助,可以点关注,点赞

也可以关注下公众号:扫码或 wx搜索:“聊5毛钱的java”,欢迎一起学习交流,关注公众号可领取博主的Java学习视频+资料,保证都是干货

SpringAOP的注解形式

3Q~

纯手敲原创不易,如果觉得对你有帮助,可以打赏支持一下,哈哈,感谢~

SpringAOP的注解形式           SpringAOP的注解形式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169591.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 命令行中 javac、java、javap 的使用详解

    命令行中 javac、java、javap 的使用详解进入命令窗口,若要切换到指定目录,例如E盘下的目录,有2种方法:1)pushd[路径],此命令可将当前目录设为指定的任一个已存在的目录C:\Users\Administrator>pushde:360DownloadsE:\360Downloads>dir//显示当前目录下的目录及文件2)直接先输入e:,然后再用cd切换到指定目录1.javac

    2022年5月28日
    77
  • Linux三剑客 grep sed awk 详细使用方法

    Linux三剑客 grep sed awk 详细使用方法Linux中最重要的三个命令在业界被称为“三剑客”,它们是awk,sed,grep。我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令。在说这三个命令前我们要插入一个小插曲就是“正则表达式”。一、正则表达式所谓的正则表达式我个人理解就是正规的表示方法。他是用简单的方法来实…

    2022年7月11日
    14
  • 电脑鼠标能动但点什么都没反应_联想台式机鼠标键盘没反应

    电脑鼠标能动但点什么都没反应_联想台式机鼠标键盘没反应1.联想电脑鼠标盘没反应是怎么回事1.打开笔记本电脑,没有任何提示,但触摸板触摸完全没有反应。这时候要确保触摸屏不是锁上了,触摸屏锁上了就会完全没有反应,这个解决办法很简单,笔记本一般按住Fn(功能键)+F6(不同的笔记本不同的按键,按键上有触摸板图像)即可解锁。有些笔记本有独立的触摸屏开锁键,注意看看哪个键有个小键盘在上面的即可。2.软件问题主要说的是驱动出现问题,例如刚刚重新安装过电脑…

    2022年9月14日
    0
  • Centos8 部署Promethus(普罗米修斯)+grafana画图「建议收藏」

    Centos8 部署Promethus(普罗米修斯)+grafana画图「建议收藏」文章目录1.普罗米修斯概述2.时间序列数据2.1.普罗米修斯概述Prometheus(由go语言(golang)开发)是一套开源的监控&报警&时间序列数据库的组合。适合监控docker容器。2.时间序列数据什么是序列数据时间序列数据(TimeSeriesData):按照时间顺序记录系统、设备状态变化的数据被称为时序数据。应用的场景很多,如:气候的变化某一个地区的各车辆的行驶轨迹数据传统证券行业实时交易数据实时运维监控数据等时间序列数据特点

    2022年7月19日
    11
  • postGresql_oracle生成uuid函数

    postGresql_oracle生成uuid函数之前用sqlserver,获取uuid,获取直接selectnewid()就好了,但是postgresql没有这种函数,只好自己写个了。如下:CREATEORREPLACEFUNCTIONuuid() RETURNStextAS$$declarestr1text;str2text;Mactext;begin–MAC地址Mac=’aa:aa:a…

    2022年8月9日
    5
  • git reset后如何返回最新版本_reset按钮无法恢复

    git reset后如何返回最新版本_reset按钮无法恢复一、问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset)、反做(revert)。二、背景知识git的版本管理,及HEAD的理解使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么…

    2022年8月22日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号