spring学习(五)—AOP相关术语

1.通知(Advice)

  通知定义了切面是什么以及何时使用。如想给程序加上日志,通知就是定义了日志“是什么”并且“在什么时候用”。通知的类型有

  前置通知:在目标方法被调用之前调用的通知。

  后置通知:在目标方法完成之后调用,不关心方法的返回。

  返回通知:在目标方法返回成功执行之后调用的通知。

  异常通知:在目标方法抛出异常后调用的通知。

  环绕通知:在被通知的方法调用之前和调用之后执行自定义的行为。类似前置+后置通知。

2.连接点(Join point)

  就是应用能使用这些通知的地方,这些地方就叫连接点。

3.切点(Poincut)

  相当于连接点的集合。切点的定义会匹配通知所要织入的一个或多个连接点。

4.切面(Aspect)

  切面是通知和切点的结合,通知和切点共同定义了切面的全部内容——它是什么,在什么时候,在何处完成其功能。

5.引入(Introduction)

  引入允许我们向现有的类添加新方法或属性。比如需要添加一个记录对象最后一次修改时的状态的功能,可以不需要修改现有的类完成此功能。可以先创建一个通知类,里面只需一个方法如setLastModified(date)和一个实例变量来保存这个状态。然后这个新方法和变量就可以被引入现有的类中。在AOP可以表示“引入了什么”。

6.织入(weaving)

  织入是把切面应用到目标对象并创建新的代理对象的过程,重点在于过程!在目标对象的生命周期里有多个点可以进行织入:编译期,类加载期,运行期。 

 7.AOP的helloworld

7.1 创建一个目标类:

//目标类接口
public interface HelloWorld{
   public void hello();
}
//其实现类
public class HelloWorldImpl implements HelloWorld{
   @Override
   public void hello(){
      System.out.println("hello world");
   }
}

7.2 定义一个切面类

public class HelloWordAspect{
    //前置通知
    public void beforeAdvice(){
        System.out.println("before hello");
    }
}

7.3 配置切面

<?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-3.0.xsd  
           http://www.springframework.org/schema/aop  
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">  
       <!--目标类bean-->
       <bean id="helloWorldImpl" class="com.liyuxin.impl.HelloWorldImpl">
       <!--配置切面-->
       <bean id="helloWordAspect" class="com.liyuxin.aspect.HelloWordAspect">
       <!--配置切点-->
       <aop:config>
           <aop:pointcut id="pointcut" expression="execution(* com.liyuxin..*.*(..))"/>  
              <aop:aspect ref="aspect">  
                <aop:before pointcut-ref="pointcut" method="beforeAdvice"/>  
             </aop:aspect>
       </aop:config>
</beans>  

expression默认是AspectJ语法,关于其语法可以看这博客:

AspectJ语法详解

7.4 测试代码

 ApplicationContext ctx =  new ClassPathXmlApplicationContext("application.xml");  
        HelloWorld helloworld =  
        ctx.getBean("helloWorldImpl", HelloWorld.class);  
        helloworld.hello(); 

 

posted on 2018-01-31 14:34  dfsgfsgsg  阅读(174)  评论(0)    收藏  举报

导航