zoukankan      html  css  js  c++  java
  • SPRING IN ACTION 第4版笔记-第一章-003-AOP介绍

    一、目标

    要在BraveKnight调用embarkOnQuest()前后各做一些处理(调用Minstrel的方法)

    二、

    1.minstrel.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4   xmlns:aop="http://www.springframework.org/schema/aop"
     5   xsi:schemaLocation="http://www.springframework.org/schema/aop 
     6       http://www.springframework.org/schema/aop/spring-aop.xsd
     7         http://www.springframework.org/schema/beans 
     8       http://www.springframework.org/schema/beans/spring-beans.xsd">
     9 
    10   <bean id="knight" class="chapter01.sia.knights.BraveKnight">
    11     <constructor-arg ref="quest" />
    12   </bean>
    13 
    14   <bean id="quest" class="chapter01.sia.knights.SlayDragonQuest">
    15     <constructor-arg value="#{T(System).out}" />
    16   </bean>
    17 
    18   <bean id="minstrel" class="chapter01.sia.knights.Minstrel">
    19     <constructor-arg value="#{T(System).out}" />
    20   </bean>
    21 
    22   <aop:config>
    23     <aop:aspect ref="minstrel">
    24       <aop:pointcut id="embark"
    25           expression="execution(* *.embarkOnQuest(..))"/>
    26         
    27       <aop:before pointcut-ref="embark" 
    28           method="singBeforeQuest"/>
    29 
    30       <aop:after pointcut-ref="embark" 
    31           method="singAfterQuest"/>
    32     </aop:aspect>
    33   </aop:config>
    34   
    35 </beans>

    分析:

    (1)首先声明xsi:schemaLocation="http://www.springframework.org/schema/aop

    (2)把Minstrel.java声明为bean,给spring管理

    (3)声明<aop:config><aop:aspect,指定到ref="minstrel"

    (4)声明<aop:pointcut,指定在这些方法中aop,expression="execution(* *.embarkOnQuest(..))"

    (5)声明<aop:before、<aop:after

    
    

    2.Minstrel

     1 package chapter01.sia.knights;
     2 
     3 import java.io.PrintStream;
     4 
     5 public class Minstrel {
     6 
     7   private PrintStream stream;
     8   
     9   public Minstrel(PrintStream stream) {
    10     this.stream = stream;
    11   }
    12 
    13   public void singBeforeQuest() {
    14     stream.println("Fa la la, the knight is so brave!");
    15   }
    16 
    17   public void singAfterQuest() {
    18     stream.println("Tee hee hee, the brave knight " +
    19             "did embark on a quest!");
    20   }
    21 
    22 }

    3.KnightMain

     1 public class KnightMain {
     2 
     3   public static void main(String[] args) throws Exception {
     4     //ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:knight.xml");
     5     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:minstrel.xml");
     6     Knight knight = context.getBean(Knight.class);
     7     knight.embarkOnQuest();
     8     context.close();
     9   }
    10 
    11 }

    4.运行结果

    1 三月 01, 2016 10:49:57 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
    2 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3f3471d: startup date [Tue Mar 01 10:49:57 CST 2016]; root of context hierarchy
    3 三月 01, 2016 10:49:57 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    4 信息: Loading XML bean definitions from class path resource [minstrel.xml]
    5 Fa la la, the knight is so brave!
    6 Embarking on quest to slay the dragon!
    7 Tee hee hee, the brave knight did embark on a quest!
    8 三月 01, 2016 10:49:58 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
    9 信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@3f3471d: startup date [Tue Mar 01 10:49:57 CST 2016]; root of context hierarchy
  • 相关阅读:
    (转)Linux系统调用和库函数调用的区别
    一个“梦想实践重度障碍者”的思考
    按字节输出数据
    内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理]
    VimdiffVIM的比较和合并工具
    [每天进步一点 流水账]回顾总结
    计算机就业方向
    ofstream和ifstream详细用法(转)
    ECMAScript 运算符关系运算符
    ECMAScript 语句标签语句
  • 原文地址:https://www.cnblogs.com/shamgod/p/5230509.html
Copyright © 2011-2022 走看看