美文网首页
day04 AOP学习

day04 AOP学习

作者: 山下_26 | 来源:发表于2019-03-09 20:53 被阅读0次

    在运行时,动态地将代码切入到类的指定法、指定位置的编程思想就是AOP(面向切面编程)
    AOP常用于编程中的事物,日志等
    AOP基本由代理机制实现

    1.AOP核心概念

    • Aspect(切面):将关注点进行模块化
    • Join Point(连接点):在程序执行过程中的某个特定的点,如谋方法调用时或处理异常时
    • Advice(通知):在切面的某个特定的连接点上执行的动作
    • PointCut(切入点):匹配连接点的断言
    • Introduction(引入):声明额外的方法或某个类型的字段
    • Target Object(目标对象):被一个或多个切面所通知的对象
    • AOP Proxy(AOP代理):AOP框架创建的对象,用来实现Aspect Contract包括通知方法执行等功能
    • Weaving(织入):把切面连接到其他的应用程序类型或对象上,并创建一个Advice的对象

    2.代理模式实例

    新建一个接口
    public interface Move {
        void move();
    
    }
    
    
    创建一个继承接口的类
    public class Tank implements Move{
        @Override
        public void move() {
            System.out.println("Tank is moving");
        }
    }
    
    
    创建代理类
    public class Tankproxy implements Move{
        private Move t;
        public Tankproxy(Move t){
            this.t=t;
        }
        @Override
        public void move() {
            System.out.println("Starting");
            t.move();
            System.out.println("stop");
        }
    }
    
    
    main方法输出验证
    public class MoveApp {
        public static void main(String[] args) {
            Tank tank=new Tank();
            Move moveProxy=new Tankproxy(tank);
            moveProxy.move();
        }
    }
    
    

    3.AOP实例

    新建一个接口
    public interface Hello {
        String getHello();
    }
    
    
    继承接口的类
    public class HelloImpl implements Hello{
    
        @Override
        public String getHello() {
            return "Hello,Spring AOP";
        }
    }
    
    AOP前置增强类
    public class MyBeforeAdvice {
        //定义前置方法
        public void beforeMethod(){
            System.out.println("This is a before method");
        }
    }
    
    
    在xml文件中配置bean和aop
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd">
    
    
    
           <bean id="hello" class="com.spring.quickstart.HelloImpl"/>
           <bean id="advice" class="com.spring.quickstart.MyBeforeAdvice"/>
           <aop:config>
               <aop:aspect id="before" ref="advice">
                      <aop:pointcut id="myPointCut" expression="execution(* com.spring.quickstart.*.*(..))"/>
                      <aop:before method="beforeMethod" pointcut-ref="myPointCut"/>
               </aop:aspect>
           </aop:config>
    </beans>
    

    main方法类输出验证

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

    相关文章

      网友评论

          本文标题:day04 AOP学习

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