Spring-AOP xml方式配置
程序员文章站
2022-03-10 08:36:30
1.新建Maven项目2. pom.xml 引入依赖 org.springframework spring-context 5.0.9.RELEASE &...
1.新建Maven项目
2. pom.xml 引入依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
主要用到了
spring框架、aspectj(这个就是aop啦,说是比spring里面的aop还好用)、spring-test(一会测试spring要用到),junit
3. 新建 目标对象,这边我还是创建了接口类
package com.itheima;
public interface ITarget {
void save();
}
package com.itheima.impl;
import com.itheima.ITarget;
public class Target implements ITarget {
public void save() {
System.out.println("saveing...");
}
}
4. 创建 applicationContext.xml
<bean id="target" class="com.itheima.impl.Target"></bean>
5. 创建测试类
package com.itheima.test;
import com.itheima.ITarget;
import com.itheima.impl.Target;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:ApplicationContext.xml")
public class AopTest {
@Autowired
private ITarget target;
@Test
public void test1(){
target.save();
}
}
测试通过
6. 创建增强类
package com.itheima.impl;
import org.aspectj.lang.ProceedingJoinPoint;
/*
增强
*/
public class MyAspect {
public void before(){
System.out.println("前置增强...");
}
public void afterReturnRuning(){
System.out.println("后置增强...");
}
public Object around(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("环绕前。。。");
System.out.println(pjp.toString());
Object proceed = pjp.proceed();
System.out.println("环绕后。。。");
return proceed;
}
public void afterThrowing(){
System.out.println("异常增强。。。");
}
}
7. 在 applicationContext.xml 中配置aop
<aop:config>
<aop:aspect ref="myaspect">
<!-- <aop:pointcut id="myPointcut" expression="execution(public void com.itheima.impl.Target.save())"/>-->
<!-- <aop:pointcut id="myPointcut1" expression="execution(* *..*(..))"/>-->
<aop:pointcut id="myPointcut" expression="execution(public void *..*(..))"/>
<!-- <aop:before method="before" pointcut-ref="myPointcut" />-->
<!-- <aop:after-returning method="afterReturnRuning" pointcut-ref="myPointcut1"></aop:after-returning>-->
<aop:around method="around" pointcut-ref="myPointcut"></aop:around>
<aop:after-throwing method="afterThrowing" pointcut-ref="myPointcut"></aop:after-throwing>
</aop:aspect>
</aop:config>
初始可先这么设置
<aop:before method="before" pointcut="execution(public void com.itheima.impl.Target.save())"></aop:before>
分拆为 访问修饰符(可省略) 返回类型 包名.类名.方法名(参数)
任意参数可用 .. 表示 两个点
返回类型,包名,类名,方法名可用 * 表示任意
*..* 可表示包名下的任意子包名
运行测试类,如果用通配符,发现会多执行一次,打印一下
多执行了这个 execution(void org.springframework.beans.factory.SmartInitializingSingleton.afterSingletonsInstantiated())
时间有限,先到这里。
本文地址:https://blog.csdn.net/shua67/article/details/112238183
上一篇: JQuery绑定事件四种实现方法解析
下一篇: c# 如何实现获取二维数组的列数