AOP简介
面向切面编程(也叫面向方面):Aspect Oriented Programming AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面(方面)编程。 主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。
主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。 可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
Guice AOP应用(这里以日志为例)
1、定义一个服务接口IAOPService.java
public interface IAOPService {
void execute(String name);
}
2、实现接口AOPServiceImpl.java
public class AOPServiceImpl implements IAOPService {
@Override
@Log
public void execute(String name) {
System.out.println(name + " execute this method.");
}
}
3、定义一个Log的注解,作用是在需要日志的方法上加上此注解
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Log {
}
4、实现Log 方法拦截类,这里要实现Guice提供的AOP接口MethodInterceptor
public class LogInterceptor implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println("[" + invocation.getMethod().getName() + " ]method begin.");
long beginTime = System.currentTimeMillis();
System.out.println("begin time : " + beginTime);
Object ret = invocation.proceed();
System.out.println("[" + invocation.getMethod().getName() + " ]method end.");
long endTime = System.currentTimeMillis();
System.out.println("end time : " + endTime);
System.out.println("method invoked time : " + (endTime - beginTime));
return ret;
}
}
在这里实现的是在方法执行前后输出一些信息。
5、实现Module
public class LogModule extends AbstractModule {
@Override
protected void configure() {
bindInterceptor(Matchers.any(), Matchers.annotatedWith(Log.class), new LogInterceptor());
bind(IAOPService.class).to(AOPServiceImpl.class);
}
}
6、实现测试类
public class LogTest {
@Inject
private IAOPService aopService;
public static void main(String[] args) {
LogTest logTest = Guice.createInjector(new LogModule()).getInstance(LogTest.class);
logTest.aopService.execute("carvin");
}
}
到此,一个简单的Log AOP应用就完成了。
分享到:
相关推荐
sisu-guice-3.1.3-no_aop.jar
guice-2.0-no_aop.jar
标签:google、inject、guice、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
java运行依赖jar包
标签:extensions、google、assistedinject、inject、guice、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...
标签:extensions、google、assistedinject、inject、guice、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...
标签:google、inject、extensions、guice、multibindings、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...
标签:google、inject、extensions、guice、multibindings、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变...
Robojuice是一款专门为Android平台设计的依赖注入框架,它基于Google的Guice库,并针对Android进行了优化。这个jar包文件下载包含两个重要的组件:`guice-2.0-no_aop.jar`和`roboguice-1.1.2.jar`。在这里,我们深入...
sisu-guice-2.1.7-noaop.jar
标签:google、inject、extensions、guice、servlet、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释...
java运行依赖jar包
标签:google、inject、extensions、guice、servlet、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,...
标签:google、inject、guice、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,...
google-guice struts2-plugin
标签:google、inject、guice、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
标签:google、inject、guice、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...
在"Guice入门教程HelloWorld篇"中,我们将学习如何使用Guice来构建简单的Java应用程序。首先,我们需要理解Guice的核心概念——模块(Module)和绑定(Binding)。模块是Guice配置的核心,它定义了哪些类应该被实例...
guice-spring-1.0.jar