JAVA框架 Spring AOP注解
一、准备工作:
1)导入jar包:

4个jar包。
2)约束:(spring需要所有的约束)有IOC约束和AOP 还有事务(tx)以及注解注入的约束(context)。
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> </beans>
3)代码:
1、接口
package jd.com.asp;
public interface asp {
void save();
void update();
}
2、实现类:
package jd.com.asp; import org.springframework.stereotype.Component; @Component(value = "aspImpl")//注入该类。
public class aspImpl implements asp {
@Override
public void save() {
System.out.println("this save method");
} @Override
public void update() {
System.out.println("this update method !");
}
}
3、切面类:
package jd.com.asp; import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component; @Component(value = "aspj")//注入切面类。
@Aspect//声明该类为切面类。
public class aspj { @Before(value = "execution(public void jd.com.asp.aspImpl.save(..))" )//通知类型和切入点。
public void log(){
System.out.println("log print!");
}
}
需要注明该类为切面类。
需要注明方法的通知类型和切入点表达式。
4、配置文件配置:
<!--开启自动扫描组件-->
<context:component-scan base-package="jd.com" />
<!--打开自动代理开关-->
<aop:aspectj-autoproxy />
入门例子完成。
通知类型:
package jd.com.asp; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component; @Component(value = "aspj")//注入切面类。
@Aspect//声明该类为切面类。
public class aspj { @Before(value = "execution(public void jd.com.asp.aspImpl.save(..))" )//通知类型和切入点。
public void log(){
System.out.println("log print!");
} //切入点调用方法:类的名字.方法名字()
@After(value = "aspj.fn()")
public void after(){
System.out.println("最终的方法!");
} @AfterReturning(value = "aspj.fn()")
public void afterreturning(){
System.out.println("后置方法"); } @Around(value = "aspj.fn()")
public void round(ProceedingJoinPoint proceedingJoinPoint){
System.out.println("环绕方法执行1");
try {
proceedingJoinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
System.out.println("环绕方法执行2");
} //切入点定义 方法的body需要是空的。
@Pointcut(value = "execution(public void jd.com.asp.aspImpl.save(..))")
public void fn(){}
}
其中可以定义切入点:
1)需要定义一个body是空的方法。
2)需要pointcut注解 后面跟切入点表达式。
3)调用的时候需要value=当前切面类的类名字.切入点定义的方法名字()
//切入点定义 方法的body需要是空的。
@Pointcut(value = "execution(public void jd.com.asp.aspImpl.save(..))")
public void fn(){}
JAVA框架 Spring AOP注解的更多相关文章
- JAVA框架 Spring AOP底层原理
一:AOP(Aspect Oriented Programming)面向切面编程. 底层实现原理是java的动态代理:1.jdk的动态代理.2.spring的cglib代理. jdk的动态代理需要被代 ...
- Java框架spring 学习笔记(十四):注解aop操作
回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...
- Spring AOP注解为什么失效?90%Java程序员不知道
使用Spring Aop注解的时候,如@Transactional, @Cacheable等注解一般需要在类方法第一个入口的地方加,不然不会生效. 如下面几种场景 1.Controller直接调用Se ...
- [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.
前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...
- Java框架spring Boot学习笔记(六):Spring Boot事务管理
SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
- Spring aop注解失效
问题 在spring 中使用 @Transactional . @Cacheable 或 自定义 AOP 注解时,对象内部方法中调用该对象的其他使用aop机制的方法会失效. @Transactiona ...
- SSM框架—Spring AOP之基于注解的声明式AspectJ(Demo)
项目结构 XML <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...
- [Spring框架]Spring AOP基础入门总结一.
前言:前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect ...
随机推荐
- python-原型模式
源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明 原型模式关注的是大量相同对象或相似对象的创建问题,意图在于通过复制一个已经存在的实 ...
- 【代码笔记】iOS-自定义loading
一,效果图. 二,工程图. 三, 代码. ViewController.h #import <UIKit/UIKit.h> //loading #import "GPLoadin ...
- 令人血脉喷张的animate.css
都说html5.css3是大局是潮流,尽管css3也不难,学起来比较简单,但我还是喜欢他的轻量级集大成者的animate.css框架,初学的小伙伴们加油啦 下面我分析一下animate.css框架里面 ...
- 精选20个高品质的免费素材,可以下载PSD格式
GraphicBurger 这个站点免费和收费的都有,注意区分 365psd 在日本比较有名的免费素材站. Pixeden Techandall Premium pixels 全部免费! Design ...
- SAP FI/CO 基本概念
每一个SAP从业者都对这些概念不陌生,理解透了这些概念,对SAP的业务体系构架才能有明确地认识. 1.集团(client)的概念:是SAP中的最高等级:每一个集团建立主数据库. 2.公司(Compan ...
- 绑定Oracle Database 到 ActiveReport
ActiveReport 可以和多种数据源交互,包括OLEDB, SQL, XML和集合对象. 在本文中我们将阐述如何绑定Oracle 数据库到 ActiveReport . 这是一件很轻松的事情.下 ...
- Java:基本数据类型与类型转换
相关内容: 基本数据类型 整型 浮点型 字符型 布尔型 数据类型转换 数组 首发时间:2017-06-22 21:18 修改时间: 2018-03-16 15:40 :修改了一下文字布局和样式,增加 ...
- Oracle表字段的增删改和重命名
增加字段语法:alter table tablename add (column datatype [default value][null/not null],….); 说明:alter table ...
- Pytest+Allure环境的搭建
参考博客 测试报告解释 pytest+allurre进阶 1. pytest的安装: 1.1. windows下: pip install pytest 1.2. linux下: pip instal ...
- Ionic 启动及应用图标
1.在项目的根目录下创建resources文件夹. 2.在文件夹中都放入icon.png(应用图标,最小192x192px,不带圆角),splash.png(启动屏幕,最小2208x2208px,中间 ...