首先让我注意一下,我使用AspectJ,我喜欢它,但我还能做些什么呢.
我知道AspectJ可以用于日志记录.在某些情况下,它用于事务控制 - 主要与注释一起实现.AspectJ也可以用于增强类(代码生成)方法,就像Spring Roo一样.
但我相信AspectJ和AOP一般可以用于:日志记录,事务控制和模拟部分类.
那么AspectJ和AOP的其他有用用例是什么?
我们已经开始使用spring aop来实现我们应用程序的交叉切割(目前的安全性和缓存).
我的经理担心这项技术对性能的影响,尽管他完全理解这些技术带来的好处.
我的问题,您是否遇到过使用aop(特别是spring aop)引入的性能问题?
许多现代框架(Spring,Hibernate)使用Java动态代理提供了非常好的动态行为,但与之相关的确切性能成本是多少?是否有针对Sun JVM的公共基准测试?
我的设置非常简单:我有一个网络前端,后端是弹簧接线.
我正在使用AOP在我的rpc服务上添加一层安全性.
这一切都很好,除了网络应用程序在发布时中止的事实:
[java] SEVERE: Context initialization failed
[java] org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/aop]
[java] Offending resource: ServletContext resource [/WEB-INF/gwthandler-servlet.xml]
这是我的xml配置文件的片段:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<aop:config>
<aop:aspect id="security" ref="securityAspect" >
<aop:pointcut id="securedServices" expression="@annotation(com.fb.boog.common.aspects.Secured)"/>
<aop:before method="checkSecurity" pointcut-ref="securedServices"/>
</aop:aspect>
</aop:config>
Run Code Online (Sandbox Code Playgroud)
我读过互联网,它可能是我的类加载问题的核心.令人怀疑,因为这是我的WEB-INF/lib目录:
./WEB-INF/lib
./WEB-INF/lib/aopalliance-alpha1.jar
./WEB-INF/lib/aspectj-1.6.6.jar
./WEB-INF/lib/commons-collections.jar
./WEB-INF/lib/commons-logging.jar
./WEB-INF/lib/ehcache-core-1.7.0.jar
./WEB-INF/lib/ejb3-persistence.jar
./WEB-INF/lib/hibernate
./WEB-INF/lib/hibernate/antlr.jar
./WEB-INF/lib/hibernate/asm.jar
./WEB-INF/lib/hibernate/bsh-2.0b1.jar
./WEB-INF/lib/hibernate/cglib.jar
./WEB-INF/lib/hibernate/dom4j.jar
./WEB-INF/lib/hibernate/freemarker.jar
./WEB-INF/lib/hibernate/hibernate-annotations.jar
./WEB-INF/lib/hibernate/hibernate-shards.jar
./WEB-INF/lib/hibernate/hibernate-tools.jar
./WEB-INF/lib/hibernate/hibernate.jar
./WEB-INF/lib/hibernate/jtidy-r8-20060801.jar
./WEB-INF/lib/jabsorb
./WEB-INF/lib/jabsorb/jabsorb-1.3.1.jar
./WEB-INF/lib/jta.jar
./WEB-INF/lib/jyaml-1.3.jar
./WEB-INF/lib/postgresql-8.4-701.jdbc4.jar
./WEB-INF/lib/sjsxp.jar
./WEB-INF/lib/spring
./WEB-INF/lib/spring/org.springframework.aop-3.0.0.RELEASE.jar
./WEB-INF/lib/spring/org.springframework.asm-3.0.0.RELEASE.jar
./WEB-INF/lib/spring/org.springframework.aspects-3.0.0.RELEASE.jar …Run Code Online (Sandbox Code Playgroud) 在我看来,AOP是一个有趣的编程范例.但是,目前还没有关于stackoverflow的讨论(至少我找不到它们).你对此有何看法?你在项目中使用AOP吗?或者你认为它是一种利基技术,不会长时间存在或者不会成为主流(就像OOP一样,至少在理论上会这样做))?
如果您确实使用AOP,请告诉我们您使用的工具.谢谢!
我用Spring AOP写了一个非常简单的Aspect.它有效,但我在理解真正发生的事情时遇到了一些问题.我不明白为什么我要添加aspectjweaver.jar?Spring-AOP文档明确指出,只要我使用Spring-AOP,我就不需要aspectj编译器或weaver:
AOP运行时仍然是纯Spring AOP,并且不依赖于AspectJ编译器或weaver.
我的配置如下所示:
<aop:aspectj-autoproxy />
@Aspect
@Service
public class RemoteInvocationAspect {
@Before("execution(* at.test.mypackage.*.*(..))")
public void test() {
System.out.println("test");
}
...
Run Code Online (Sandbox Code Playgroud)
我也尝试过XML配置,虽然没有改变任何东西.也许我可以放手,但我真的想了解为什么使用aspectj-weaver?如果我没有在maven中添加依赖项,我会得到 java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException
我正在修改已经加载到jvm中的类.我找到的解决方案是:
transform(代码:DemoTransformer)从第1步到第5步工作正常,但是有问题retransformClasses.它transform再次调用,其中包含修改类的代码.它修改了我从不想修改的其他类.我认为问题可能发生在addTransformer或期间retransformClasses.但我还是很困惑.那么,如何重新转换一个类?有任何想法吗?谢谢
public class AttachTest {
public static void main(String[] args) throws AttachNotSupportedException,
IOException, AgentLoadException, AgentInitializationException {
String agentPath = "D:\\work\\workspace\\myjar\\loaded.jar";
String vid = args[0];
VirtualMachine vm = VirtualMachine.attach(vid);
vm.loadAgent(agentPath);
}
}
Run Code Online (Sandbox Code Playgroud)
//代理
public class AgentMain {
public static void agentmain (String agentArgs, Instrumentation inst)
throws ClassNotFoundException, UnmodifiableClassException,
InterruptedException {
Class<?> [] allLoadedClasses = inst.getAllLoadedClasses();
String tmpString = null;
for (int …Run Code Online (Sandbox Code Playgroud) 我试图了解AOP,依赖注入和控制SPRING相关概念的反转,但我很难理解它.
有人能用简单的英文解释一下吗?
我有以下弹簧配置:
<context:component-scan base-package="uk.co.mysite.googlecontactsync.aop"/>
<bean name="simpleEmailSender" class="uk.co.mysite.util.email.simple.SimpleEmailSenderImplementation"/>
<aop:aspectj-autoproxy/>
Run Code Online (Sandbox Code Playgroud)
然后我有一个方面:
@Aspect
public class SyncLoggingAspect {
@Autowired
private SimpleEmailSender simpleEmailSender
@AfterReturning(value="execution(* uk.co.mysite.datasync.polling.Poller+.doPoll())", returning="pusher")
public void afterPoll(Pusher pusher) {
simpleEmailSender.send(new PusherEmail(pusher));
}
}
Run Code Online (Sandbox Code Playgroud)
这个方面有效(我可以在afterPoll上找到断点)但simpleEmailSender为null.不幸的是,我找不到明确的文件说明原因.(为了记录,我的simpleEmailSender bean存在并正确连接到其他类)以下事情使我感到困惑:
显然你可以告诉我,我不了解事情应该如何从头开始.
我正在使用命名空间System.Runtime.Remoting.Proxies和System.Runtime.Remoting.MessagingC#中的AOP.我正在尝试将我的应用程序从.Net Framework 4.6移植到dnxcore/dotnet核心.
Intellisense说,这两个命名空间不适用于我的framework-vesion(netcoreapp1.0/dnxcore50).知道这两个命名空间是否会出现?或者任何想法如何使用RealProxy-class 获得AOP ?
我不想使用第三方库 - 我只想使用.Net提供给我的东西.