Software_programming_Guice_Log4j2
2019-08-24
Log4j2 配置
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <Configuration status="WARN"> 3 <Properties> 4 <Property name="console-pattern">%d{yyyy-MM-dd HH:mm} [%t] [%level] %logger{36} - %msg%n</Property> 5 <Property name="logFile">src\main\resource\log\Automation.log</Property> 6 </Properties> 7 <Appenders> 8 <Console name="Console" target="SYSTEM_OUT"> 9 <PatternLayout pattern="${console-pattern}"/> 10 </Console> 11 12 <File name="FileAppender" fileName="${logFile}"> 13 <PatternLayout pattern="${console-pattern}" /> 14 </File> 15 16 <Async name="AsyncAppender"> 17 <AppenderRef ref="FileAppender" /> 18 </Async> 19 </Appenders> 20 21 <Loggers> 22 <Root level="info"> 23 <AppenderRef ref="Console" /> 24 <AppenderRef ref="AsyncAppender" /> 25 </Root> 26 <Logger name="AsyncFileLoogger" level="error" additivity="true"> 27 <AppenderRef ref="AsyncAppender" /> 28 </Logger> 29 </Loggers> 30 31 </Configuration>
1 注解 Log
1 @Retention(RetentionPolicy.RUNTIME) 2 @Target(ElementType.METHOD) 3 public @interface Log { 4 5 }
2. 实现 MethodInterceptor LogInterceptor.java
package framework.Guice.Guice_Log;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class LogInterceptor implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
String methodName = methodInvocation.getMethod().getName();
System.out.printf("logInterceptor method %s begin", methodName);
LoggerAuto.logger.info("log4j2 : info -> "+methodName);
LoggerAuto.logger.warn("log4j2 : warn !!");
return methodInvocation.proceed();
}
}
3. binding LogModule
package framework.Guice.Guice_Log;
import com.google.inject.AbstractModule;
import com.google.inject.matcher.Matchers;
public class LogModule extends AbstractModule {
@Override
protected void configure(){
bindInterceptor(Matchers.any(),
Matchers.annotatedWith(Log.class),
new LogInterceptor());
bind(IServiceLog.class).to(ServiceLog.class);
}
}
Matchers 简单的接口, 用来表示是否匹配, 一个表示参与的类, 一个表示相关的方法。
匹配方法:
4 Log annotation
1 package framework.Guice.Guice_Log; 2 3 public class ServiceLog implements IServiceLog { 4 5 @Override 6 @Log 7 public void execute() { 8 System.out.printf("service method : %s", "do none"); 9 } 10 }
5. use
1 package framework.Guice.Guice_Log; 2 3 import com.google.inject.Guice; 4 import com.google.inject.Inject; 5 6 public class testGuiceLog { 7 @Inject 8 private IServiceLog serviceLog; 9 10 public static void main(String[] args){ 11 testGuiceLog testGuiceLog = Guice.createInjector(new LogModule()).getInstance( 12 framework.Guice.Guice_Log.testGuiceLog.class); 13 testGuiceLog.serviceLog.execute(); 14 } 15 }
AOP x相关方法 :
1. Advice
2. Joinpoint
3. Pointcut
4. Aspect
5. Introduction
6. Target
7. Proxy
8. Weaving
Guice 支持 AOP 条件:
1. 类必须是 public 或 package
2.类不能是 final
3. 方法必须是 public ,package, protected
4. 方法不能是 final
5.实例必须通过Guice 的 @Inject 注入或者有一个无参数的构造函数。
Thanks for Refernce :