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
  • 相关阅读:
    《ML模型超参数调节:网格搜索、随机搜索与贝叶斯优化》
    《黎曼几何与流形学习》
    《信息几何优化,随机优化, 与进化策略》
    生产订单加反作废按钮
    生产订单新增按钮没权限
    生产订单备注字段锁定
    审核后提交物料附件
    MRP设置自动执行
    CRM系统数据授权
    复制物料时不复制安全库存
  • 原文地址:https://www.cnblogs.com/charlexu/p/3554675.html
Copyright © 2011-2022 走看看