StatisticOrder:
package com.teach.ssm.aop.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
public interface StatisticOrder {
void computeRatio(ProceedingJoinPoint jp);
}
StatisticOrderImpl:
package com.teach.ssm.aop.aspect.impl;
import org.aspectj.lang.ProceedingJoinPoint;
import com.teach.ssm.aop.aspect.StatisticOrder;
import com.teach.ssm.aop.domain.Order;
public class StatisticOrderImpl implements StatisticOrder {
@Override
public void computeRatio(ProceedingJoinPoint jp) {
System.out.println("in aspect before...");
try {
Object[] args = jp.getArgs();
Order order = (Order) args[0];
System.out.println(order);
jp.proceed();
System.out.println("统计成交比...");
} catch (Throwable ex) {
System.out.println("原有方法执行异常");
}
System.out.println("in aspect after...");
}
}
OrderDao:
package com.teach.ssm.aop.dao;
import com.teach.ssm.aop.domain.Order;
public interface OrderDao {
public void saveOrder(Order order);
public void savePayInfo(Order order);
}
OrderDaoImpl:
package com.teach.ssm.aop.dao.impl;
import com.teach.ssm.aop.dao.OrderDao;
import com.teach.ssm.aop.domain.Order;
public class OrderDaoImpl implements OrderDao {
@Override
public void saveOrder(Order order) {
System.out.println("保存订单信息:" + order);
}
@Override
public void savePayInfo(Order order) {
System.out.println("保存支付信息" + order);
}
}
Order:
package com.teach.ssm.aop.domain;
public class Order {
private String goodsName;
private float money;
private int count;
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public float getMoney() {
return money;
}
public void setMoney(float money) {
this.money = money;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public String toString() {
return "Order [goodsName=" + goodsName + ", money=" + money + ", count=" + count + "]";
}
public Order(String goodsName, float money, int count) {
super();
this.goodsName = goodsName;
this.money = money;
this.count = count;
}
}
OrderService:
package com.teach.ssm.aop.service;
import com.teach.ssm.aop.domain.Order;
public interface OrderService {
public void submitOrder(Order order);
public void payOrder(Order order);
}
OrderServiceImpl:
package com.teach.ssm.aop.service.impl;
import com.teach.ssm.aop.dao.OrderDao;
import com.teach.ssm.aop.domain.Order;
import com.teach.ssm.aop.service.OrderService;
public class OrderServiceImpl implements OrderService {
private OrderDao orderDao;
public void setOrderDao(OrderDao orderDao) {
this.orderDao = orderDao;
}
@Override
public void submitOrder(Order order) {
System.out.println("提交订单...");
// System.out.println(1/0);
orderDao.saveOrder(order);
}
@Override
public void payOrder(Order order) {
System.out.println("支付订单...");
orderDao.savePayInfo(order);
}
}
TestAOP:
package com.teach.ssm.aop.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.teach.ssm.aop.domain.Order;
import com.teach.ssm.aop.service.OrderService;
import com.teach.ssm.aop.service.impl.OrderServiceImpl;
public class TestAOP {
@Test
public void orderServiceTest() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
OrderService orderService = ctx.getBean("orderService", OrderService.class);
Order order = new Order("iphone 20", 1000f, 1);
orderService.submitOrder(order);
System.out.println("------------------------");
orderService.payOrder(order);
}
}
applicationContext:
<?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">
<bean id="orderDao" class="com.teach.ssm.aop.dao.impl.OrderDaoImpl" />
<bean id="orderService" class="com.teach.ssm.aop.service.impl.OrderServiceImpl">
<property name="orderDao" ref="orderDao"></property>
</bean>
<bean id="statisticOrder" class="com.teach.ssm.aop.aspect.impl.StatisticOrderImpl"/>
<aop:config>
<aop:pointcut id="orderPointcut" expression="execution(* com.teach.ssm.aop.service.impl.OrderServiceImpl.*Order(..))" />
<aop:aspect id="statisticOrderAspect" ref="statisticOrder">
<aop:around pointcut-ref="orderPointcut" method="computeRatio"/>
</aop:aspect>
</aop:config>
</beans>