zoukankan      html  css  js  c++  java
  • Seasar2框架:AOP

    Seasar2是由日本人开发的一个框架。它通过自己定义的规约,很大程度上地减少了设定代码。但是由于这个原因,导致了框架学习初期会有比较大的跨越。

    AOP例子:

    Greeting.java
    1 package examples.di;
    2 
    3 public interface Greeting {
    4 
    5     String greet();
    6 }

     

    GreetingImpl.java
     1 package examples.di.impl;
     2 
     3 import examples.di.Greeting;
     4 
     5 public class GreetingImpl implements Greeting {
     6 
     7     public String greet() {
     8         return "Hello World!";
     9     }
    10 }
    GreetingClient.java
    1 package examples.di;
    2 
    3 public interface GreetingClient {
    4 
    5     void execute();
    6 }
    GreetingClientImpl.java
     1 package examples.di.impl;
     2 
     3 import examples.di.Greeting;
     4 import examples.di.GreetingClient;
     5 
     6 public class GreetingClientImpl implements GreetingClient {
     7 
     8     private Greeting greeting;
     9 
    10     public void setGreeting(Greeting greeting) {
    11         this.greeting = greeting;
    12     }
    13 
    14     public void execute() {
    15         System.out.println(greeting.greet());
    16     }
    17 }
    GreetingMain3.dicon
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE components PUBLIC
     3     "-//SEASAR//DTD S2Container 2.3//EN"
     4     "http://www.seasar.org/dtd/components23.dtd">
     5 <components>
     6     <include path="aop.dicon"/>
     7     <component name="greeting"
     8         class="examples.di.impl.GreetingImpl">
     9         <aspect>aop.traceInterceptor</aspect>
    10     </component>
    11     <component name="greetingClient"
    12         class="examples.di.impl.GreetingClientImpl">
    13         <property name="greeting">greeting</property>
    14         <aspect>aop.traceInterceptor</aspect>
    15     </component>
    16 </components>
    GreetingMain3.java
     1 package examples.di.main;
     2 
     3 import org.seasar.framework.container.S2Container;
     4 import org.seasar.framework.container.factory.S2ContainerFactory;
     5 
     6 import examples.di.GreetingClient;
     7 
     8 public class GreetingMain3 {
     9 
    10     private static final String PATH =
    11         "examples/di/dicon/GreetingMain3.dicon";
    12 
    13     public static void main(String[] args) {
    14         S2Container container =
    15             S2ContainerFactory.create(PATH);
    16         GreetingClient greetingClient = (GreetingClient)
    17             container.getComponent("greetingClient");
    18         greetingClient.execute();
    19     }
    20 }

      除了官网上的这些文件,还需要

    aop.dicon
    <?xml version="1.0" encoding="Shift_JIS"?>
    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
    "http://www.seasar.org/dtd/components.dtd">
    <components namespace="aop">
        <component name="traceInterceptor"
            class="org.seasar.framework.aop.interceptors.TraceInterceptor"/>
        <component name="traceThrowsInterceptor"
            class="org.seasar.framework.aop.interceptors.TraceThrowsInterceptor"/>
    </components>
    log4j.properties
    log4j.category.org.seasar=DEBUG, C
    log4j.additivity.org.seasar=false
    
    log4j.appender.C=org.apache.log4j.ConsoleAppender
    log4j.appender.C.Target=System.out
    log4j.appender.C.ImmediateFlush=true
    log4j.appender.C.layout=org.apache.log4j.PatternLayout
    log4j.appender.C.layout.ConversionPattern=%-5p %d [%t] %m%n

    这里,aop.dicon中的“org.seasar.framework.aop.interceptors.TraceInterceptor”默认的切面输出是“方法函数”和“返回值”。

    注意:log4j的配置要使用debug。

    输出:

    DEBUG 2014-02-20 11:23:10,957 [main] BEGIN examples.di.main.GreetingClientImpl#execute()
    DEBUG 2014-02-20 11:23:10,957 [main] BEGIN examples.di.main.GreetingImpl#greet()
    DEBUG 2014-02-20 11:23:10,957 [main] END examples.di.main.GreetingImpl#greet() : Hello World!
    Hello World!
    DEBUG 2014-02-20 11:23:10,957 [main] END examples.di.main.GreetingClientImpl#execute() : nul
  • 相关阅读:
    JavaScript 操作 DOM 元素
    字节数
    如何判断校准曲线是否合格
    [WPF]MVVM模式下如何在后台cs中调用绑定命令
    逆对数antilog0.03376如何计算
    未能解析此远程名称:'nuget.org' 的解决方法
    【WPF】WPF ScorllView触摸滚动实现
    【VS2017】清除NuGet下载旧版本缓存
    【UWP】截图
    test
  • 原文地址:https://www.cnblogs.com/charlexu/p/3554675.html
Copyright © 2011-2022 走看看