美文网首页
Spring AOP的原理及实现

Spring AOP的原理及实现

作者: 空山Echo | 来源:发表于2018-09-17 17:50 被阅读0次

一、安装STS插件

二、整合junit测试

  1. 导包 4+2+aop+test
    • 对测试类@RunWith(SpringJUnit4ClassRunner.class)//帮我们创建容器
    • ContextConfiguration("classpath:spring配置文件路径")//指定创建容器使用哪个配置文件
    • @Resource(name="user")//将名为user的对象注入到测试类的变量中
      private User u;

三、Spring中的AOP

  1. AOP思想
    纵向重复,横向抽取


    image.png
  2. Spring中的AOP概念
    spring能为容器中管理的对象生成动态代理对象
  3. Spring实现AOP的原理
  • 动态代理(有接口时优先)
    被代理的对象必须要实现接口,才能产生代理对象,如果没有接口将不能使用动态代理


    image.png
    image.png
  • cglb代理(没有接口)
    第三方代理技术,cglb代理可以对任何类生产代理,代理的原理是对目标对象进行继承代理,如果目标对象被final修饰,则该类无法被cglb代理


    image.png
    image.png
image.png

四、AOP中名词解释

image.png

  1. 导包 4(spring)+2(log)+2+2


    image.png
  2. 准备目标对象


    image.png
  3. 准备通知


    image.png
    image.png
  1. 配置进行织入,将通知织入目标对象
  2. 方式一、xml配置完成织入
    spring applicationContext.xml中
  • 导入aop约束
  • 配置目标对象<bean class="ServiceImpl">
  • 配置通知对象<bean class="MyAdvice">
  • 配置将通知织入对象


    image.png
  • 测试


    image.png
  1. 方式二、注解
  • spring applicationContext.xml中 开启
  • 对通知类添加@Aspect
  • 对通知类中的方法指定类型和切入点
    • 其一:如下对各个方法添加注解
      @Before(execution(切点表达式))
      public void before(){}
    • 其二:可写抽取切点方法,供个方法使用
      @Pointcut("execution(* 包名.+类名公共结尾部分.(..))")
      public void pc(){}
      @Before(类名.pc())
      public void before(){}

相关文章

网友评论

      本文标题:Spring AOP的原理及实现

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