话不多说上代码

项目架构图及Lib包如下:

第二步创建业务类接口

package cn.happy.day01.entity;
/**
* 1.业务接口
* @author Happy
*
*/
public interface ISomeService {
//1.1 执行事务
public void doTransaction();
//1.2 书写日志
public String doLog();
}

第三步实现接口重写接口方法

package cn.happy.day01.entity;

public class SomeServiceImpl implements ISomeService {

    @Override
public void doTransaction() {
System.out.println("开启事务");
} @Override
public String doLog() {
System.out.println("书写日志");
return "abc";
} }

第四步创建aop包定义增强类

package cn.happy.day01.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before; @Aspect //该类为切面
public class MyAspect {
//前置通知
@Before(value="execution(public * *(..))")
public void myBefore(){
System.out.println("这是前置增强");
} }

第五步在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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
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"> <!-- 目标对象 -->
<bean id="someService" class="cn.happy.day01.entity.SomeServiceImpl"></bean> <!-- 切面: -->
<bean id="myAspect" class="cn.happy.day01.aop.MyAspect"></bean> <aop:aspectj-autoproxy/>
</beans>

最后我们写测试类测试

package cn.happy.day01.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import cn.happy.day01.entity.ISomeService;
public class Spring_01Test {
@Test
public void testOne(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("cn/happy/day01/applicationContext.xml");
ISomeService service = (ISomeService)ctx.getBean("someService");
service.doTransaction();
String result = service.doLog();
System.out.println(result);
}
}

ps:

1.切入点表达式
execution(【modifiers-pattern?】 访问修饰符
ret-type-pattern 返回值类型
【declaring-type-pattern?】 全限定性类名
name-pattern(param-pattern) 方法名(参数名)
【throws-pattern?】) 抛出异常类型

切入点表达式要匹配的对象就是目标方法的方法名。所以,execution表达式中明显就是方法的签名。注意:表达式中加[]的部分表示可省略部分,各部分间用空格分开。在其中可以使用以下符号:
符号 意义
* 0至多个任意字符
.. 用在方法参数中,表示任意多个参数
用在包名后,表示当前包及其子包路径
+ 用在类名后,表示当前类及其子类
用在接口后,表示当前接口及其实现类
案例:
execution(public * *(..)) 指定切入点为:任意公共方法
execution(* set*(..)) 指定切入点为:任何一个以"set"开始的方法

ok就这样了试试吧

最新文章

  1. LINUNX下PHP下载中文文件名代码
  2. 11.Android之常用对话框AlertDialog学习
  3. GPG操作——签名验证
  4. 第二篇 SQL Server代理作业步骤和子系统
  5. #查找列表中元素,移除每个元素的空格,并查找以 a或A开头 并且以 c 结尾的所有元素
  6. struts2视频学习笔记 19-20(手工编写代码实现所有方法和指定方法校验)
  7. 获取字符串对应的MD5值 (AL16UTF16LE)
  8. 第二次项目冲刺(Beta阶段)5.21
  9. ant基础[转]
  10. 数据结构之B树、B+树(二)---代码实现
  11. python_code list_3
  12. 上传文件报错--Unable to find &#39;struts.multipart.saveDir&#39; property setting.
  13. Mysql Window 解压版卸载
  14. 十 js中forEach,for in,for of循环的用法
  15. alert.log中的minact-scn: useg scan erroring out with error e:376警告
  16. Android组件化方案及组件消息总线modular-event实战
  17. open-falcon之graph
  18. 15. Studio上字符串转整形、整形转字符串例子
  19. Managing Images on smartos
  20. LeetCode 404. Sum of Left Leaves (C++)

热门文章

  1. webgl巧妙方式写着色器代码
  2. Quartz 2D在ios中的使用简述一:坐标体系
  3. python center, ljust, rjust
  4. 数据结构-多级指针单链表(C语言)
  5. poj2528(线段树+离散化)Mayor&#39;s posters
  6. ajax post 跨域
  7. githup在线预览demo
  8. java中输入方式Scanner和BufferedReader
  9. [ios-必看] IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS
  10. 【Unity编程】欧拉角与万向节死锁(图文版)
  11. java中读取配置文件ResourceBundle和Properties两种方式比较
  12. hadoop(原生及CDH发行版)关键目录、配置文件及服务对应文件名详解
  13. python创建列表和向列表添加元素方法
  14. 如何减少UI设计师产品与前端工程师的沟通成本
  15. 【tmos】SpringBoot登录拦截
  16. dbeaver导出MySQL的架构提示&quot;IO Error: Utility &#39;mysqldump.exe&#39; not found in client home &#39;MySQL Connector/Net&quot;解决方案
  17. rest_framework 之视图
  18. 【centos】 error: command &#39;gcc&#39; failed with exit status 1
  19. 再看copy_on_write缩小临界区的例子
  20. NO.11天作业