我在Guice的下载页面上看到了一个名为Guice no aop的模块,其意图显然是向Android开发者进行营销。一些在线搜索检索到了像RoboGuice这样的库,它们看起来像是在做类似的基于AOP的IoC,一些文章甚至给出了很棒的代码示例。
但我的问题是:如果没有这些特殊的库,为什么Guice不能在Android应用程序上运行?我本想在Guice的网站/wiki上找到一些东西,但令我惊讶的是,找不到任何原因。
有人知道吗?
编辑
这个问题的辅助问题是一个更广泛的问题:
- 还有哪些Java框架不会在Androids上运行?!?!(经验法则是什么?)
此页面列出了一些不受支持的标准包。任何依赖这些包的东西都可能不起作用。。。
不支持这些软件包通常是Java 2平台标准版的一部分,Android不支持。
- java.applet
- java.awt
- java.beans
- java.lang.management
- java.rmi
- javax.accessibility
- javax.activity
- javax.imageio
- javax.management
- javax.nameing
- javax.print
- javax.rmi
- javax.security.auth.kerberos
- javax.security.auth.spi
- javax.security.sasl
- javax.swing
- javax.transaction javax.xml(javax.xml.parsers除外)
- org.ietf*
- org.omg.*
- org.w3c.dom.*(子包)
正如已经指出的那样,在运行时依赖字节码编织的AOP将不起作用(并非所有的AOP都起作用,例如Spring AOP)。
附言:大多数mocking框架也会生成字节码,不会工作或不能完全工作。
看看这里的比较表。它适用于Guice 2.0和1.0,但它也应该适用于Guice3。
带有AOP和不带有AOP的Guice之间的主要功能差异是方法拦截器。基于您在方法上使用的注释,以及您在guice中绑定的用于处理注释的内容,guice将在运行时生成代码来执行您想要的操作。这是Guice在Android上无法完成的运行时代码生成,因为目前还没有API来动态生成dalvik字节码。