1.主要jar包
2.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-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--IOC 注解 让spring知道要扫描哪个包-->
<context:component-scan base-package="com.sii"></context:component-scan>
<!-- 开启aop注解方式 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
3.定义切面类
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component //加入IOC容器
@Aspect //指定当前类为切面类
public class Aop {
//指定切入点表达式:拦截哪些方法,即为哪些类生成代理对象
@Pointcut("execution(* com.sii.aop.test.*.*(..))")
public void pointCut(){
//这个方法的作用:因为每一个通知都需要配置切入点表达式,就把都需要的表达式,写在了一个空的类中,
//使用时,引用这个类就可以了,方便管理。
}
@Before("pointCut()")
public void begin(){
System.out.println("***开启事务***");
}
@After("pointCut()")
public void after(){
System.out.println("***关闭事务***");
}
}
4.定义接口,实现类,和 未实现接口的类
接口Animal
public interface Animal {
public void eat();
}
实现类Dog
import org.springframework.stereotype.Component;
@Component
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("实现了接口");
}
}
类Cat
import org.springframework.stereotype.Component;
@Component
public class Cat {
public void eat(){
System.out.println("未实现接口");
}
}
5.测试
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(locations = "classpath:applicationContext.xml")
public class TestAop {
@Autowired
private Animal dog;
@Autowired
private Cat cat;
@Test
public void test1() {
dog.eat();
cat.eat();
}
}
结果: