spring面向切面编程详解
2014-03-29 22:11
295 查看
切面,听起来似乎有些陌生吧,但其在实际项目中经常用到:比如说:Filter(过滤器),Interceptor(拦截器)以及代理...[/b]
一、aop术语:
1、切面:所有切入点的集合
2、切入点:一组符合某种规则的连接点
3、连接点:狭义上通俗的讲指的是某个方法切面,听起来似乎有些陌生吧,但其在实际项目中经常用到:比如说:Filter(过滤器),Interceptor(拦截器)以及代理...
一、aop术语:
1、切面:所有切入点的集合
2、切入点:一组符合某种规则的连接点
3、连接点:狭义上通俗的讲指的是某个方法
4、通知:在某个连接点上的某种操作,该操作并非连接点中的操作,而是外来的操作。
5、引入(Introduction):引入(在AspectJ中被称为inter-type声明)使得一个切面可以定义被通知对象实现给定的接口,
并且可以为那些对象提供具体的实现
二、用示例来理解:
2.1:添加声明以及支持:为下面红色字体
<?xml version="1.0"
encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 配置Spring上下文的注解
扫描包的注解 -->
<context:component-scan
base-package="com.lovesmile.oa" />
<aop:aspectj-autoproxy/>//声明切面的自动代理
2.2:切面的定义类:
@Aspect//声明为切面
@Component//向Spring提交
public class MyInterceptor
{
@Pointcut("execution(*
com.lovesmile.oa.biz.impl.StuffBizImpl.*add(..))")
private void anymethod(){
//@Pointcut("execution(*
com.lovesmile.oa.biz.impl.StuffBizImpl.*(..))
&& execution(*
find*(..))")
System.out.println("ddddd");
};
@Pointcut("execution(*
com.lovesmile.oa.biz.impl.StuffBizImpl.find*(..))")
private void manymethod(){
//@Pointcut("execution(*
com.lovesmile.oa.biz.impl.StuffBizImpl.*(..))
&& execution(*
find*(..))")
System.out.println("ddddd");
};
@Before("anymethod()
&&
args(name)")//也可注册多个切入点,比如:@Before("anymethod()
&&
manymethod()")
public void Before(String
name){
System.out.println("前置通知:短信发送Before");
}
@AfterReturning(pointcut="anymethod()",returning="returnval")
public void AfterReturning(String
returnval){
System.out.println("后置通知:发送成功:@AfterReturning"+returnval);
}
@AfterThrowing(pointcut="anymethod()",throwing="e")
public void AfterThrowing(Exception
e){
System.out.println("后置通知:发送异常:@AfterReturning");
}
@After("anymethod()")
public void After(){
System.out.println("最终通知:发送成功:@AfterReturning");
}
@Around("anymethod()")//环绕通知
public Object
doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable
{
Object object=null;
System.out.println("短信:事务开始");
object=pjp.proceed();//继续调用业务方法
System.out.println("短信:事务关闭");
return object;
}
}
下面来详解一下:
@Pointcut("execution(*
com.lovesmile.oa.biz.impl.StuffBizImpl.find*(..))")
第一个*表示返回任何类型,
也可指定-->java.lang.String
com.lovesmile.oa.biz.impl.StuffBizImpl表示要过滤的类
.StuffBizImpl.find*(..)表示类的任意方法以及任意参数
注意:
com.lovesmile.oa.biz.impl..*.*(..)
表示包中的任意类或者子类的任意方法任意参数
2.3:哈哈,jar包你是否有了,这几个你必须得有:红色箭头的
jar文件
是不是理解了,不会的可以私信哦...
相关文章推荐
- Spring AOP面向切面编程详解(基于XML方式 注解方式 注入Aspectj方式)
- Spring AOP(Spring面向切面编程)
- 反向控制和面向切面编程在Spring的应用
- 深入理解面向切面的编程AOP、AspectJ、Spring
- Spring 面向切面编程AOP
- 简单理解Spring中AOP(面向切面编程)
- spring学习--面向切面编程AOP和AspectJ
- Spring之AOP面向切片
- spring的AOP--面向切面编程
- 第4章 面向切面的Spring--xml配置切面 笔记2
- 第 5 章 Spring AOP: Spring之面向方面编程
- Prototype功能预览十:面向未来技术的框架 - 一个业务实现同时支持dubbo/dubbox/spring mvc/hession
- Spring核心机制(面向切面编程AOP)
- Spring 之 控制反转(IoC), 依赖注入(DI)和面向切面(AOP)
- Spring实战-读书笔记(章节四)-面向切面的Spring
- Spring学习(六)-面向切面编程(AOP)
- Spring笔记——使用Spring进行面向切面(AOP)编程
- AOP面向切编程及在Spring中的使用方法
- Spring AOP(面向切面)
- Spring aop面向切面编程