1 package examples.di; 2 3 public interface Greeting { 4 5 String greet(); 6 }
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 }
1 package examples.di; 2 3 public interface GreetingClient { 4 5 void execute(); 6 }
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 }
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>
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
<?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.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