首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

spring aop 哪位高手能简单说一下 如果不用spring ,aop该如何实现呢?

2013-06-25 
spring aop 谁能简单说一下如果不用spring,aop该怎么实现呢??spring aop 谁能简单说一下如果不用spring,ao

spring aop 谁能简单说一下 如果不用spring ,aop该怎么实现呢??
spring aop 谁能简单说一下  如果不用spring  ,aop该怎么实现呢??
[解决办法]
spring Aop面向切面编程可以使用配制文件和注解两种方式实现(一般用在权限拦截,运行期监控):
配制文件:
<bean id="myInterceptor" class="cn.xmlaop.service.MyInterceptor"/>//切面类
        <bean id="personService" class="cn.xmlaop.service.impl.PersonServiceImpl"></bean>
         <aop:config>
        <aop:aspect id="myAspect" ref="myInterceptor">//声明切面,调用切面类,注:切面点,通知在这个配制里
        <aop:pointcut id="myPointCut" expression="execution (* cn.xmlaop.service.impl.PersonServiceImpl.*(..))"/>//定义切面点,表达式用来包含哪些方法需要通知
        前置通知:<aop:before pointcut-ref="myPointCut" method="doAccessCheck"/>//通知,pointcut-ref引用切点,method引用切面里的某个方法
        </aop:aspect>
        </aop:config>
注解方式:
@Aspect//定义为切面类 @Component("myInteceptor")//实例化
public class MyInteceptor {
@Pointcut("execution(* cn.springaop.service.impl.*.*(..))")//切点
public void AnyMethod(){//用方法的方式定义切点的名称(ID)

}

@Before("AnyMethod() && args(name)")//前置通知,args(name)//name跟前置方法里的参数名称一样,通知只有一个为String类型参数的的方法
 public void doBefore(String name){
System.out.println("前置通知:"+name);
}

@AfterReturning(pointcut="AnyMethod()",returning="result")//后置通知,returning="result",只有通知有返回类型为String的方法
public void doAfterReturning(String result){
System.out.println("后置通知:"+result);
}

@After("AnyMethod()")
public void doAfter(){
System.out.println("最终通知");
}

@AfterThrowing("AnyMethod()")
public void doAfterThrowing(){
System.out.println("例外通知");
}

@Around("AnyMethod()")//环绕通知
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
//if(){//判断用户是否在权限
System.out.println("进入方法");
Object result = pjp.proceed();
System.out.println("退出方法");
//}
return result;
}
}
spring aop是通过创建代理对象来实现的,自己可以用JDK代理和Cglib代理来实现,具体代码就不贴了

热点排行