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
原文地址:https://www.cnblogs.com/charlexu/p/3554675.html