SSM进阶(三)Spring—AOP-注解编程

Spring—AOP-注解编程

上节我们谈到了,关于Aop的AspectJ的全自动编程,它图普通的全自动编程的区别就在于它的特点:不用实现接口,方法名随意,但是有参数必须符合规范,因为配置文件就是通过这些参数来照切入点的,而传统方式是实现了相应的接口,再实现接口里面的方法;

好了废话不多说了,今天价绍的是AspectJ的注解开发:

注解还是之前再IOC里面将的那些注解在加上一下注解:

   @Before   @AfterReturning  @Around @Aspect 具体用法将会再下文中提到:

 

1首先我们同样应该创建通知类,但创建通知类的时候应该加注解,还有一些要注意的点:

1) 我们应该先建一个通知类再类名之前

加注解@Component 然后再加 @Aspect—表面这是一个切面

2) 在类里面我们应该首先创建一个切点函数(我是这么命名的方便理解)、

切面函数的特点就是没有参数 没有函数体 而且函数名称随意(本文以myPoint为例);

在这个函数之上我们加注解

@PointCut(“ execution(* com.ww.service.*.*(..))”)//切入点表达式+PointCut声明表面这是一个切入点;

3) 首先类创建前置通知

注解是@Before(“myPoint()”)

这样的注解,首先Before表示这是一个前置通知,括号内的函数表示切入点

配置文件扫描注解的时候,从这里得到切入点;代码如下:

@Before("mypoint()")
public void myBefore(JoinPoint joinPoint){这里的参数也要写和之前一样
        System.out.println("前置通知");

             }

4) 在来创建后置通知

注解是@AfterRuturning(“value=mypoint()”,returning=”res”)

同样AfterRuturning表示这是一个后置通知;

Value表示的是切入点,returning表示的是返回值,

读过前文应该都知道返回参数,这就不做赘述了。代码是:

@AfterReturning(value= "mypoint()",returning="res")
public void myAfter(JoinPoint joinPoint,Object res){
    System.out.println("后置通知"+res);
}

这里再强调一下注意的地方:

第一:与之前在配置文件中配置后置通知时,参数的名称要与方法里的参数名称一致,同样在这里注解中的返回值名称也要和方法里的一样。

第二:为什么之前的几个没有value?

     因为当你的参数只有一个的时候value是可以省略的;

        有多个参数的时候要表明你的每一个参数代表什么所以必须写;

第三:也是小编经常犯的错误就是参数之间的逗号一定记得写,否则报错;

5) 最后来创建环绕通知

注解是@Around(“myPoint”)

意思一样就不多赘述代码如下:

@Around("mypoint()")
      public Object myAround(ProceedingJoinPointproceedingJoinPoint) throws Throwable   {
        System.out.println("环绕钱");
        Objecta=proceedingJoinPoint.proceed();
        System.out.println("还绕后");
        return  a;
    }

解释一下:环绕通知的参数和之前的不一样它的类型是ProceedingJoinPoint

在这就是使用环绕通知是必须手动调用方法,用的就是参数.proceed()’;它是由返回值的;

2 我们来创建目标类

  对于目标类与之前的区别IOC是注解的没什么区别注解就是

@Service(“该实现类的父接口名称”)

需要注意的就是注解一定是加在实现类上的,就像配置的时候class的值是它的实现类的包名+类名是一样的;

3我们类配置核心文件applicotionContext.xml

像之前一样注解方式我们只需要开启注解扫描即可

但是此处我们用的是AspectJ的注解方式,所以我们还应该开启的就是AspectJ的自动扫描,代码如下:

开启注解扫描

<context:component-scan base-package= "com.qf.advice,com.qf.service"></context:component-scan>

开启的就是AspectJ的自动扫描
   <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

4最后我们进行测试就行了下面是测试代码

 

 

UserService userService=(UserService) new ClassPathXmlApplicationContext("applicationContext.xml").getBean("UserService");
//        userService.add();
        userService.find();
下面是效果图

 

以上就是AspectJ的注解开发。

由于我们还没有整合IOC与AOP,所以现在是分开做分开做测试,

 

 

在后面的博文中会为大家代理IOC与AOP的整合 Spring与Mybatis等的整合,敬请期待!!!!!!

版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值