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 }

 

  除了官網上的這些文件,還須要java

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」默認的切面輸出是「方法函數」和「返回值」。apache

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

輸出:框架

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
相關文章
相關標籤/搜索