美文网首页
10.AOP学习

10.AOP学习

作者: 王杰磊 | 来源:发表于2019-03-09 10:28 被阅读0次

AOP的概念

  • AOP(Aspect Oriented Programming,面向切面编程,在AOP中,模块化的单元是切面。切面可以实现跨多个类型和对象之间的事务管理、日志等方面的模块化,基本上通过代理机制实现与面向对象编程相比AOP是豪放派的选择,大手一挥,凡某某包某类某命名方法,一并同样处理(正则表达式)。

AOP的优势

  • 提供声明式企业服务
  • 允许用户自定义切面
  • 可以对业务逻辑的各个部分进行隔离

AOP核心概念

  • Aspect(切面)
  • Join Point(连接点)
  • Advice(通知)
  • Pointcut(切入点)
  • Introduce(引入)
  • Target Project(目标对象)
  • AOP Proxy(AOP代理)
  • Weaving(织入)

AOP示例

  • 新建一个接口Move
package com.spring.aop;

public interface Move {
    public void move();
}
  • 新建一个Tank类,继承Move接口的move方法
package com.spring.aop;

public class Tank implements Move {
    @Override
    public void move() {
        System.out.println("Tank is moving");
    }
}
  • 新建一个TankProxy代理Move接口
package com.spring.aop;

public class TankProxy implements Move {
    private Move t;

    public TankProxy(Move t) {
        this.t = t;
    }

    @Override
    public void move() {
        System.out.println("start");
        t.move();
        System.out.println("stop");
    }
}
  • Moveapp
package com.spring.aop;

public class MoveApp {
    public static void main(String[] args) {
        Move t=new Tank();
        Move t1=new Car();
        Move moveproxy=new TankProxy(t);
        Move moveproxy1=new TankProxy(t1);
        moveproxy.move();
        moveproxy1.move();
    }
}

结果


image.png

AOP前置方法示例

  • 新建一个Hello接口,定义一个getHello方法
package com.spring.aop;

public interface Hello {
    String getHello();
}
  • 定义一个HelloImpl类继承getHello方法
package com.spring.aop;

public class HelloImpl implements Hello {
    @Override
    public String getHello() {
        return "Hello,Spring AOP";
    }
}
  • 自定义一个前置增强类MyBeforeAdvice
package com.spring.aop;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 用户自定义的前置增强类
 */
public class MyBeforeAdvice {
    private static final Logger logger= LoggerFactory.getLogger("Hello.class");
//    定义前置方法
    public void beforeMethod(){
        logger.info("错误");
        System.out.println("this is a before method");
    }
}
  • 配置Bean和AOP
<!--配置一个Hello的bean,等同于Hello hello=new HelloImpl-->
    <bean id="hello" class="com.spring.aop.HelloImpl"/>
    <!--配置一个MyBeforeAdvice前置增强的bean-->
    <bean id="mybeforeadvice" class="com.spring.aop.MyBeforeAdvice"/>
    <!--进行AOP的配置-->
    <aop:config>
        <aop:aspect id="before" ref="mybeforeadvice">
            <aop:pointcut id="myPointCut" expression="execution(* com.spring.aop.*.*(..))"/>
            <aop:before method="beforeMethod" pointcut-ref="myPointCut"/>
        </aop:aspect>
    </aop:config>
  • 新建一个HelloApp实现
package com.spring.aop;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloApp {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("Spring.xml");
        Hello hello = context.getBean(Hello.class);
        System.out.println(hello.getHello());
    }
}

结果


image.png

相关文章

  • 10.AOP学习

    AOP的概念 AOP(Aspect Oriented Programming,面向切面编程,在AOP中,模块化的单...

  • 10.AOP概念和术语

    一、AOP概念 AOP(Aspect Oriented Programming)面向切面编程,是针对面向对象编程的...

  • 学习学习学习

    第三天了,连续三天,早上睁眼开始,看视频,做课件,连续作业,直到晚上十二点才睡觉。吃饭不规律,想起来就吃,感觉不饿...

  • 学习学习学习

    23岁的我,才真正明白,什么是学习,什么是努力,努力和不努力真的不同,就好比同样是一篇稿子,我用一周背下来,有的人...

  • 学习学习学习!

    妈妈总是让我学习,我只能用装当办法。 方法一: 方法二: 方法三: 方法四: ...

  • 学习学习学习

    001.今天看财富自由之路看了第二遍,而且看了一半,算是完成任务很开心。中间有想放弃的念头,坚持看完。眼睛痛,一直...

  • 学习学习学习

    马自达为什么坚持高压缩比自吸

  • 学习!学习!学习!

    学习的痛苦是暂时的 没有学到的痛苦是永恒的 因为学习而特别充实的一天 很踏实 ~~~~ 2015.11.28.阴天...

  • 学习!学习!学习!

    无数次想要去逃离,可这封闭的世界根本出不去。你没有什么可以抛弃、只能咬着牙带着面具微笑的活下去。 没有那个人、他也...

  • 学习学习学习!

    昨天和今天两个上午,都在学习新媒体运营,学习的过程中心里只有一个想法:这也太套路,太功利了吧。可真应了那句话...

网友评论

      本文标题:10.AOP学习

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