一、准备工作:

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注解的更多相关文章

  1. JAVA框架 Spring AOP底层原理

    一:AOP(Aspect Oriented Programming)面向切面编程. 底层实现原理是java的动态代理:1.jdk的动态代理.2.spring的cglib代理. jdk的动态代理需要被代 ...

  2. Java框架spring 学习笔记(十四):注解aop操作

    回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...

  3. Spring AOP注解为什么失效?90%Java程序员不知道

    使用Spring Aop注解的时候,如@Transactional, @Cacheable等注解一般需要在类方法第一个入口的地方加,不然不会生效. 如下面几种场景 1.Controller直接调用Se ...

  4. [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

    前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...

  5. Java框架spring Boot学习笔记(六):Spring Boot事务管理

    SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.

  6. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  7. Spring aop注解失效

    问题 在spring 中使用 @Transactional . @Cacheable 或 自定义 AOP 注解时,对象内部方法中调用该对象的其他使用aop机制的方法会失效. @Transactiona ...

  8. SSM框架—Spring AOP之基于注解的声明式AspectJ(Demo)

    项目结构 XML <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...

  9. [Spring框架]Spring AOP基础入门总结一.

    前言:前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect ...

随机推荐

  1. TF-IDF原理

    什么是TF-IDF TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率).  是一种用于资讯检索与资讯探勘的常用加权技术.TF-IDF ...

  2. 2.Observer Pattern(观察者模式)

    Observer Pattern(观察者模式)定义: 在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新. 干说定义肯定没有举例理解的透彻.想到Observ ...

  3. HDU2444(KB10-B 二分图判定+最大匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  4. POJ1222(SummerTrainingDay01-E)

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11078   Accepted: 7 ...

  5. 【代码笔记】iOS-UIActionSheet动态添加按钮

    一,效果图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...

  6. Oracle常用方法备份

    1.UNION ALL 和UNION.INTERSECT.MINUS 连接所有的查询结果.去掉重复的结果.操作返回查询结果中公共的行.在进行两个表格或者两个查询结果的时候,返回在第一个表格/查询结果中 ...

  7. Android逆向 编写一个Android程序

    本节使用的Android Studio版本是3.0.1 首先,我们先编写一个apk,后面用这个apk来进行逆向.用Android Studio创建一个新的Android项目,命名为Jhm,一路Next ...

  8. Android--用JS去控制WebView显示的字体的大小

    <script type="text/javascript"> function changeFontSize(size) { var tfs = '120%'; va ...

  9. Android Monkey的使用

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/71750907 本文出自[赵彦军的博客] 什么是 Monkey Monkey 是一个 ...

  10. MAYA逼真手枪制作视频教程 中文字幕

    下载地址 更多中文字幕教程请关注微镜映画网,有各类CG教程提供