Ioc

作者: 我该怎么取id | 来源:发表于2019-04-18 14:32 被阅读0次

  1.AOP的实现:1.1配置文件的形式实现的。

    实现核心业务和辅助功能的交织:

  目的是为了将核心业务与辅助业务分开

  步骤: 1.定义好辅助功能的切面类,以及核心功能业务类。

          2.通过ApplicationContext.xml配置切面与业务方法的交织

  (spring支持方法的切入)

  3. 配置切入点

                    需要一个代理对象实现辅助功能的调用,

AOP是通过动态代理的形式实现切面的  

    <aop:config proxy-target-class="true">

    <aop:aspect id="" ref="">

          <aop:pointcut id="display" expression="execution(* service.StudentService.display(..))"/>

        配置具体的通知,辅助功能的方法

  <aop:before method="before" pointcut-ref="display"/>

  <aop:after method="after" pointcut-ref="display"/>

                              <aop:after-returning method="returnning" pointcut-ref="display" returning="o"/>

                              <aop:after-throwing method="exception" pointcut-ref="display"/>

    </aop:aspect>

</aop:conig>

1.2注解的形式实现AOP:

          1.定义好辅助功能的切面类,以及核心功能业务类。 

          2.开启注解,并使用aspectj的动态代理的形式实现  

        <context:component-scan base-package="AOP"></context:component-scan>

<!--指明使用aspectj-autoproxy动态代理的形式实现-->

        <aop:aspectj-autoproxy proxy-target-class="true"/>

3.对应的切面类写明注解:

  @Aspect

@Component

public class WatchAOP {

    @Pointcut("execution(* service.StudentService.display(..))")

    public  void  myProject(){}

  @Before("myProject()")

    public  void  before(){

        System.out.println("核心业务方法调用之前");

        //日志功能,性能统计。。。。

    };

  @After("myProject()")

    public  void  after(){

        System.out.println("核心业务方法调用之后");

    };

  @AfterThrowing("myProject()")

    public  void  exception(){

        System.out.println("核心业务方法出现异常");

    };

  @AfterReturning(value = "myProject()",returning = "o")

  public  void  returnning(JoinPoint point,Object o){

        System.out.println("方法已经执行完成,核心方法的类名是:"+point.getTarget().getClass().getName()+"核心业务的方法是"+point.getSignature().getName()+"方法的返回值是:"+o);

    };

    };

相关文章

网友评论

      本文标题:Ioc

      本文链接:https://www.haomeiwen.com/subject/gyxtgqtx.html