Spring 传统AOP配置

传统Spring AOP通知类型(Spring版本1.2 开始)

首先: AOP联盟定义 Advice 通知接口,

然后: Spring AOP 在Advice 接口基础上,扩充为五种通知类型。

通知类型:

前置通知:在目标方法执行前实施增强。

后置通知:在目标方法执行后实施增强。

环绕通知:在目标方法执行前后实施增强。

异常通知:在方法抛出异常后实施增强。

引介通知:在目标类中添加一些新的方法和属性。

________________________________________________________________________________________

新建applicationContext.xml文件,添加新的xsd约束。

<?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">

接口类OrderService:

public interface OrderService {
	
	public void add();
	public void update();
	public void delete();
	public void search();
	
}


实现类OrderServiceImpl:

public class OrderServiceImpl implements OrderService{

	@Override
	public void add() {
		System.out.println("添加...");
	}

	@Override
	public void update() {
		System.out.println("修改...");
	}

	@Override
	public void delete() {
		System.out.println("删除...");
	}

	@Override
	public void search() {
		System.out.println("搜索...");
	}

}

通知Advice:

public class MyMehtodInterceptor implements MethodInterceptor{

	@Override
	public Object invoke(MethodInvocation arg0) throws Throwable {
		System.out.println("环绕前增强...");
		Object result = arg0.proceed();
		System.out.println("环绕后增强...");
		return result;
	}

}

applicationContext.xml:

<bean id="orderService" class="cn.itcast.spring.c_aop.OrderServiceImpl"></bean>
     
<!-- 通知 -->
<bean id="mymethodadvice" class="cn.itcast.spring.c_aop.MyMehtodInterceptor"></bean>
     
<!-- 切面配置 -->
<aop:config>
	<aop:pointcut expression="execution(* cn.itcast.spring.c_aop.OrderServiceImpl.*(..))" id="mypointcut"/>
	<aop:advisor advice-ref="mymethodadvice" pointcut-ref="mypointcut"/>
</aop:config>

测试类AOPTest:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class AOPTest {
	
	@Autowired
	private OrderService orderService;
	
	@Test
	public void testOrderService(){
		orderService.search();
		orderService.add();
		orderService.update();
		orderService.delete();
	}

}

输出结果:

AOP配置说明:

aop:advisor: 定义spring传统AOP的切面的,只支持一个PointCut和一个Advice

aop:aspect : 定义AspectJ框架切面的,可以包含多个PointCut 和多个Advice

aop:pointcut : 切点定义

 

补充切点表达式的定义:

 

通过execution函数,可以定义切点的方法切入
语法:
        execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
例如
        匹配所有类public方法 
                execution(public * *(..))
        匹配指定包下所有类方法 execution(* cn.itcast.dao.*(..)) 不包含子包
                execution(* cn.itcast.dao..*(..))  ..*表示包、子孙包下所有类
        匹配指定类所有方法 execution(* cn.itcast.service.UserService.*(..))
        匹配实现特定接口所有类方法
                execution(* cn.itcast.dao.GenericDAO+.*(..))
         匹配所有save开头的方法
                execution(* save*(..))

 

 





 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值