aspectjweaver
一、导入aspectjweaver.jar包
二、创建一个类,使在执行方法之前之后调用
package com.ly.Spring.aop.advice;
public class AdviceRound {
/*创建两个方法,方法名随意,这里为方便区分,设为before即执行方法之前调用,after即执行方法之后调用*/
public void before(){
System.out.println("before之前调用");
}
public void after(){
System.out.println("after之后调用");
}
}
三、创建一个类。定义两个方法,当调用这些方法时,会使之之前调用before方法,之后调用after方法
package com.ly.spring.aop.aspectservice.impl;
import com.ly.spring.aop.AspectService.AspectService;
public class AspectServiceImpl implements AspectService{
@Override
public void print(String message) {
System.out.println(message);
}
@Override
public void save() {
System.out.println("调用了save方法");
}
}
四、创建spring中bean配置,需加入xmlns:aop="http://www.springframework.org/schema/aop" http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
<?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"
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-4.2.xsd">
<!--目标对象 -->
<bean id="aspectservice" class="com.ly.spring.aop.AspectService.impl.AspectServiceImpl"/>
<!-- advice通知 -->
<bean id="adviceMessage" class="com.ly.spring.aop.advice.AdviceRound"></bean>
<!-- aspectjweaver.jar中为以下配置 -->
<aop:config>
<aop:aspect id="myaspect" ref="adviceMessage">
<!-- aop切点格式 匹配com.ittx.spring.aopservice.impl包下所有的类的所有方法。。
第一个*代表所有的返回值类型
第二个*代表所有的类
第三个*代表类所有方法
最后一个..代表所有的参数。
也可以直接定位到此类的某个方法execution(* com.ly.spring.aop.AspectService.impl.AspectServiceImpl.print(..))-->
<aop:pointcut id="myPointcut" expression="execution(* com.ly.spring.aop.AspectService.impl.*.*(..))" />
<!-- pointcut-ref=""里面填的为 aop:pointcut中的id值-->
<aop:before method="before" pointcut-ref="myPointcut"/>
<aop:after method="after" pointcut-ref="myPointcut"/>
</aop:aspect>
</aop:config>
</beans>
五、以下为测试类
package junittest;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.context.APPlicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ly.spring.aop.AspectService.AspectService;
public class aoptest {
@Test
public void test() {
ApplicationContext context=new ClassPathXmlApplicationContext("springBeans.xml");
AspectService aspectService=(AspectService) context.getBean("aspectservice");
aspectService.print("执行打印message代码");
aspectService.save();
}
}
相关阅读
译者的话 之前去京东面试,被问到 AOP 相关的问题,之前一直没有系统地学习相关的知识,答得不是很好。趁着假期,找了一下相关的资料,CSDN
Spring AOP @After,@Around,@Before执行的顺序以及可
AOP中有@Before,@After,@Around,@AfterRunning注解等等。 首先上下自己的代码,定义了切点的定义 @Aspect @Component public class L
1、Aop面向切面编程。纵向重复,横向抽取。2、代理 生活中的实例,找明星拍戏,上综艺…….直接找明星,说明明星太小,如果明星有点名气,
**二、AOP的设计与实现 1、JVM的动态代理特性** 在Spring AOP实现中, 使用的核心技术时动态代理,而这种动态代理实
Spring-AOP @AspectJ切点函数之within()
概述 语法 实例 withincomxgjNaiveWaiter withincomxgj withincomxgj withincomxgjMark 概述 通过类匹配模式串声明切点