-
引入Spring框架开发的基本开发包,spring的传统AOP的开发的包与aspectJ的开发包
-
创建spring配置文件 applicationContext.xml
<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/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
</beans>
-
创建包结构
dao
package dao;
public class CustomerDaoImpl implements CustomerDao{
@Override
public void save() {
System.out.println("dao save");
}
}
切面类
package demo;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect//定义切面类的注解
public class AspectAnno {
//定义前置通知(value填写切入点表达式)
@Before(value="execution(* *..*DaoImpl.save(..))")
public void demo1() {
System.out.println("before anno");
}
}
-
将目标类与切面类配置到applicationContex.xml中,并设置自动代理
自动代理作用:https://www.cnblogs.com/zmxie/p/3399629.html
<?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/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 定义自动代理 -->
<aop:aspectj-autoproxy/>
<!-- spring 代理bean -->
<bean id="customerDao" class="dao.CustomerDaoImpl"/>
<!-- 定义切面类 -->
<bean id="aspectAnno" class="demo.AspectAnno"/>
</beans>
-
编写测试类
package demo;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import dao.CustomerDao;
//定义@RunWith继承junit测试环境,@ContextConfiguration初始化xml
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo {
//用@Resource获得bean
@Resource(name="customerDao")
private CustomerDao cdao;
//测试方法
@Test
public void demo1() {
cdao.save();
}
}
测试结果: