Tag: aop

Spring AOP Generic Typing

我是Spring的新手,我遇到了一个方面的问题。 切入点是使用generics类型的接口: public interface DaoJdbc { public void create(T input); public T read(int id); public void update(T s); public void delete(int id); public void getDailyMessage(); } 这是我的方面: 该方面适用于delete() ,但不适用于create() 。 如果我使用DaoJdbc的实现而不是接口本身(我不想这样做),它将适用于’create()’。 我可以假设这是一个问题, update()使用generics类型而delete()不使用generics类型。 有什么方法可以让我使用界面工作吗? 提前致谢。

如何在类上创建一个方面,这不是使用Spring AOP的bean?

我在遗留应用程序上工作,使用Spring AOP(即ProxyFactoryBean )。 我需要在某个类的方法周围添加一个方面。 但是这个类不是 bean。 AspecjJ切入点表达式如下: execution(* xyz.package.Class.method()) 我创建了一个MethodInterceptor和AspectJExpressionPointcut ,但我不知道如何使这两个一起工作。 编辑 : 我没有这个类的源代码,它是第三方库。 这个类的实例不是由我创建的,既不是在源代码中创建的,也不是作为bean在spring配置中创建的。 它由库内部使用。 任何帮助赞赏。

AspectJ加载时编织签名jar

是否有人成功使用带有签名jar的AspectJ加载时编织? 我有一个例外,不知道如何解决它(使用AspectJ 1.6.8-16.10测试): Exception in thread “main” java.lang.NoClassDefFoundError: com/package/clazz$AjcClosure1 at com.package.test.main(test.java:55) Caused by: java.lang.ClassNotFoundException: com.package.clazz$AjcClosure1 at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) … 1 more 坦率地说我事件不确定它是否在技术上可行,但我知道类似的问题(使用来自已签名的java类的动态生成的java代码)是为Hibernate项目完成的(即使用Javassist而不是CGLIB)。 细节在这里 。

使用大量AOP请求范围bean时的性能问题

我正在使用Spring 3处理一个半大型应用程序,并且在同时向其投入数百个用户时遇到了性能问题。 我使用Spring的AOP代理使用了几个请求范围的bean,我可以看到,每当我调用其中一个bean上的任何方法时,都会调用CGLIB拦截器,然后调用AbstractBeanFactory.getBean(),它调用add()on现有Spring bean的同步集。 由于这个add()是同步的,所以当有数千个调用它等待添加到同一个列表时,它会有效地锁定服务器。 有没有办法使用请求范围的bean来解决这个问题? 我在Spring文档中读到,如果bean实现了任何接口(http://static.springsource.org/spring/docs/2.0.0/reference/aop.html#d0e9015),那么CGLIB不会被使用,但是我的请求范围是bean所有实现一个(实际上是同一个),它仍然发生。 我肯定需要将bean作为请求作用域,因为它们的某些字段是在应用程序的一个部分中为特定请求计算的,然后我使用SpEL在同一请求期间在应用程序的不同部分获取它们的值。 我想如果我把bean原型作为范围,当我第二次使用SpEL来获取它时,我会有一个新鲜的对象。 这是一个代码示例,说明了我的问题。 请参阅最后两行,以获取描述我究竟遇到问题的评论。 public Interface SomeInterface { public String getProperty1(); public void setProperty1(String property); public String getProperty2(); public void setProperty2(String property); } public class SomeClass implements SomeInterface { private String property1; private String property2; public String getProperty1() { return propery1; } public void setProperty1(String property) { property1=property;} […]

了解Spring AOP

我正在使用Spring 3.0框架,仍然是一个新手。 任何人都可以用外行术语解释我的AOP编程是什么? (一个简短的例子肯定会有帮助) Spring如何整合/增强/支持它?

如何在Spring配置文件中混合使用CGLIB和JDK代理?

这个线程与我在这里遇到的有关访问受建议类的受保护方法的需求有关 。 我正在使用Spring 3.0.6,并创建了一个Spring分析方面,我正在使用JDK代理应用于大量的bean。 但是,由于需要访问一个特定bean中的受保护方法,我想使用CGLIB建议它。 所有其他bean我想继续使用JDK Proxies。 我使用了注释和xml配置的混合,但这个特定方面是在XML配置中定义的。 我知道有标签,但据我所知,这适用于所有方面。 无论如何要定义单个方面来使用CGLIB吗? 我试图将配置拆分为两个,并且对于一个配置指定target-class=”true”而另一个target-class=”false” ,但它似乎在那时将CGLIB应用于所有人。 有没有办法实现这个目标? 谢谢, 埃里克

通过Spring AOP + Aspectj进行exception处理

在我的项目中,我有一个域层,它基本上是POJO和一个位于域层顶部的Spring控制器/服务层。 我还有一个位于服务和域之间的AOP层。 我的域层正在抛出业务exception,这些exception现在正在服务层中处理。 但是我想更改它,以便在AOP层中处理从域层抛出的exception。 AOP层会出现某种错误响应并将其发送回Spring控制器/ Web服务层。 我可以创建一个IBizResponse并创建它的两个子类/接口,也许是SuccessResponse和ErrorResponse,并使我的域层方法返回IBizResponse。 但是,我无法弄清楚如何使AOP将ErrorResponse对象返回到服务层。

启用S​​pring AOP或AspectJ

这是从这个问题继续: @Aspect方面的Spring autowired bean为null 我最初的理解是,当使用Spring AOP时,使用@Aspect注释的类被创建为spring managed beans,因此dependency injection将正常工作。 但是,似乎带有@Aspect注释的对象被创建为弹簧容器外的单例,因此我必须像XML一样配置它,以便将其作为spring托管bean启用: 这已经让我完全糊涂了。 我认为以下配置将使用spring AOP: 因此,它将使用组件扫描创建方面bean来扫描@Aspect注释,然后autoproxy将创建一个beanPostProcessor,它使用适当的建议代理我的上下文中的所有bean。 然后我想要启用aspectJ我需要一个完全不同的XML配置(顺便说一下,我似乎无法在文档中找到一个例子)。 正是这种配置使用aspectJ来创建将在我的容器之外的方面,或者通过操纵字节码而不是代理来工作。 注意 这不是关于spring AOP和J方面之间差异的问题,这里有很好的阐述: Spring AOP vs AspectJ

如何调试Spring AOP

我有一个Spring AOP的问题,它没有将方面与它应该的所有方法联系起来(在我看来)(有关根问题的更多信息,请参阅此问题: Spring AOP忽略了一些Hessian服务的方法 )。 我如何调试,哪些方法和实例与哪些方面相结合? 有没有类似于弹簧的详细旗帜,它提供了这些信息?

Spring Boot Logger方面

当访问特定包的类中的方法时,我在记录日志信息时遇到问题。 换句话说,发生“不”记录。 我甚至绝望并添加了System.out.println语句,没有运气。 我的所有类都位于org.my.package包下,即org.my.package.controller , org.my.package.model等。 这是我的Application类: package org.my.package; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; @Configuration @ComponentScan(basePackages = {“org.my.package.config”}) @EnableAutoConfiguration @EnableAspectJAutoProxy public class FirstWebAppApplication { public static void main(String[] args) { SpringApplication.run(FirstWebAppApplication.class, args); } } 这是我的配置类: package org.my.package.config; import org.deloitte.javatraining.daythree.utilities.MyLogger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; @Configuration @EnableAspectJAutoProxy @ComponentScan(basePackages […]