第一步:编写切面类
package com.ssm.order;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class MyAspectAnno {
@Before(value="execution(* com.ssm.order.dao.OrderDAO.addOrder(..))")
public void before() {
System.out.println("啊哈哈哈,我前入。。。。");
}
@AfterReturning(value="execution(* com.ssm.order.dao.OrderDAO.addOrder(..))")
public void after() {
System.out.println("啊哈哈哈,我后入。。。");
}
@Around(value="execution(* com.ssm.order.dao.OrderDAO.findOrder(..))")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
System.out.println("环绕前增强==========");
Object obj = joinPoint.proceed();
System.out.println("环绕后增强==========");
return obj;
}
// 异常抛出通知:
@AfterThrowing(value="execution(* com.ssm.order.dao.OrderDAO.delete())",throwing="e")
public void afterThrowing(Throwable e){
System.out.println("异常抛出增强========="+e.getMessage());
}
// 最终通知
// @After(value="com.ssm.order.dao.OrderDAO")
// public void finalAfter(){
// System.out.println("最终增强============");
// }
}
第二步:创见要使用aop的接口和接口实现类
package com.ssm.order.dao;
public interface OrderDAO {
public void addOrder();
public void findOrder();
public void delete();
}
package com.ssm.order.dao.impl;
import com.ssm.order.dao.OrderDAO;
public class OrderDAOImpl implements OrderDAO{
@Override
public void addOrder() {
// TODO Auto-generated method stub
System.out.println("add:哎呀,我被执行了,,,,");
}
@Override
public void findOrder() {
// TODO Auto-generated method stub
System.out.println("find:哎呀,我被执行了,,,,");
}
@Override
public void delete() {
// TODO Auto-generated method stub
System.out.println("delete:哎呀,我被执行了,,,,"+1/0);
}
}
第三步:配置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"
xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 在配置文件中开启注解的AOP的开发============ -->
<aop:aspectj-autoproxy/>
<!-- bean definitions here -->
<bean id="userDAOImpl" class="com.ssm.user.impl.UserDAOImpl"></bean>
<bean id="orderDAOImpl" class="com.ssm.order.dao.impl.OrderDAOImpl"></bean>
<bean id="myAspect" class="com.ssm.order.MyAspectAnno"></bean>
<!-- <bean id="applicationContext" class=""></bean> -->
</beans>
第四步:编写测试类
package com.ssm.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ssm.order.dao.OrderDAO;
import com.ssm.user.dao.UserDAO;
//@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration("classpath:applicationContext.xml")
public class Ssmtest {
@Test//测试aop
public void aopTest(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
OrderDAO orderDAO = (OrderDAO) applicationContext.getBean("orderDAOImpl");
orderDAO.addOrder();
orderDAO.findOrder();
orderDAO.delete();
}
}
五:console控制台输出结果
add:哎呀,我被执行了,,,,
啊哈哈哈,我后入。。。
环绕前增强==========
find:哎呀,我被执行了,,,,
环绕后增强==========
异常抛出增强=========/ by ze