`
jag522
  • 浏览: 33326 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

aop:aspectj-autoproxy的内部机制

 
阅读更多

要说Spring xml配置中的<aop:aspectj-autoproxy />,先从@EnableAspectJAutoProxy注解说起,

Spring的配置除了使用xml之外,还可以使用Java+ 注解的方式,例如下面的AppConfig类:

// 配置文件类

 @Configuration
 @EnableAspectJAutoProxy
 public class AppConfig {
     @Bean
     public FooService fooService() {
         return new FooService();
     }

     @Bean // the Aspect itself must also be a Bean
     public MyAspect myAspect() {
         return new MyAspect();
     }
 }

----------------------------------------

// Service类

 public class FooService {
     // various methods
 }

----------------------------------------

// 切面类

 @Aspect
 public class MyAspect {
     @Before("execution(* FooService+.*(..))")
     public void advice() {
         // advise FooService methods as appropriate
     }
 }

其中@EnableAspectJAutoProxy注解会确保MyAspect切面被合理地处理并且FooService类会被自动创建代理,Spring 在内部会采用AnnotationAwareAspectJAutoProxyCreator进行自动代理的创建工作。

用户可以自己控制代理的类型,通过proxyTargetClass属性,默认false,采用JDK动态代理织入增强;如果设为true,则采用CGLIB动态代理织入增强。不过即使proxyTargetClass设置为false,如果目标类没有声明接口,则Spring将自动使用CGLib动态代理。

注意,@Aspect切面类也可以同时加上@Component注解,通过包扫描来实现bean的自动注册。

 

如果使用xml配置,则使用<aop:aspectj-autoproxy/>,效果等同于@EnableAspectJAutoProxy

 

参考资料:

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/EnableAspectJAutoProxy.html

2
2
分享到:
评论

相关推荐

    Spring实现AOP的四种方式

    配置可以通过xml文件来进行,大概有四种方式: 1. 配置ProxyFactoryBean,显式地设置advisors, advice, target等(基于代理的AOP ) ...4. 通过&lt;aop: aspectj-autoproxy&gt;来配置,使用AspectJ的注解来标识通知及切入点

    spring_aop4.rar_Home Home_jar 转换_spring AOP jar

    aop:aspectj-autoproxy proxy-target-class="true"/&gt; JDK动态代理和CGLIB字节码生成的区别? * JDK动态代理只能对实现了接口的类生成代理,而不能针对类 * CGLIB是针对类实现代理,主要是对指定的类生成一个...

    11spring4_aop3.rar

    第三种实现方法—通过注解来实现 签名 注解实现aop &lt;?xml version="1.0" encoding="UTF-8"?&gt; ... xmlns:aop="http://www.springframework.org/schema/aop" ... &lt;aop:aspectj-autoproxy/&gt; &lt;/beans&gt;

    spring框架手动提交事务,jdbctample

    &lt;aop:aspectj-autoproxy proxy-target-class="true"&gt;&lt;/aop:aspectj-autoproxy&gt; xml中要有这句,可以解决子类类报错的问题。 或者去掉这句话,同时去掉public class AccountServiceImpl implements AccountService {...

    Spring2.5使用AOP需要的aspectJ

    Spring2.5开发 如果我们用到了AOP的话 一定需要aspectjrt.jar + aspectjweaver.jar 两个jar文件 这里面提供了 导入这两个就可以进行AOP开发了

    java aspectj.jar+aspectjrt.jar+aspectjweaver.jar

    java aop 三个jar包, 文件列表: aspectj-1.8.10.jar,aspectjrt.jar,aspectjweaver.jar 配置方法 aop:aspectj-autoproxy 亲测可正常运行, 资源来于网络,非本人原创

    Spring.html

    修改默认代理方法:&lt;aop:aspectj-autoproxy proxy-target-class="true"/&gt; 增强种类 前置通知 后置通知 异常通知 最终通知 环绕通知 注意:使用注解的方式,最终通知和后置通知顺序换了,建议使用环绕通知...

    spring_MVC源码

    54. &lt;aop:aspectj-autoproxy/&gt; 55.&lt;/beans&gt; hibernate.properties数据库连接配置 [java] view plaincopy 01.dataSource.password=123 02.dataSource.username=root 03.dataSource.databaseName=test...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1....

    Spring中文帮助文档

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.6.1. 理解AOP代理 6.7. 以编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ进行domain ...

    Spring API

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.6.1. 理解AOP代理 6.7. 以编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ进行domain ...

    spring chm文档

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 ...

    Spring 2.0 开发参考手册

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 ...

    spring-framework-reference-4.1.2

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

    spring-framework-reference4.1.4

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

Global site tag (gtag.js) - Google Analytics