当前位置: 首页 > news >正文

企业网站源码生成器中国白云手机网站建设

企业网站源码生成器,中国白云手机网站建设,网站未备案会怎么样,最简单的制作网站Java AOP Framework概述 1. AspectJ1.1 使用AspectJ进行切面编程 2. Spring AOP2.1 使用Spring AOP进行切面编程2.2 如何决定使用哪种动态代理2.3 如何通过配置指定代理方式2.4 Spring AOP和AspectJ的关系 3. Spring Boot AOP4. 扩展4.1 AspectJ织入方式详解 参考 Java常用的AO… Java AOP Framework概述 1. AspectJ1.1 使用AspectJ进行切面编程 2. Spring AOP2.1 使用Spring AOP进行切面编程2.2 如何决定使用哪种动态代理2.3 如何通过配置指定代理方式2.4 Spring AOP和AspectJ的关系 3. Spring Boot AOP4. 扩展4.1 AspectJ织入方式详解 参考 Java常用的AOP框架有AspectJ、Spring AOP、Javassist、Guice、Byte Buddy等本文主要介绍AspectJ的功能示例Spring AOP的主要功能、代码示例、以及自动代理的配置和实现。并简要介绍了Spring AOP和AspectJ的关系以及Spring AOP在Spring Boot自动配置时不同版本的差异。 1. AspectJ AspectJ是一个基于Java语言的强大的面向切面编程AOP框架。它扩展了Java语言提供了更丰富的AOP功能并且与Java语言紧密集成。 AspectJ提供了一种在编译时或运行时织入切面逻辑的方式以实现横切关注点的处理。它支持在方法调用、方法执行、字段访问和异常处理等连接点上应用切面逻辑。 以下是AspectJ的一些主要特点和功能 丰富的切入点表达式AspectJ提供了灵活且强大的切入点表达式语言可以精确地选择要应用切面的连接点。 多种类型的通知AspectJ支持多种类型的通知包括前置通知、后置通知、返回通知、异常通知和环绕通知。这些通知可以在切点的不同阶段执行切面逻辑。 切面继承和优先级AspectJ支持切面之间的继承关系和优先级设置可以灵活地组织和管理切面。 静态织入和动态织入AspectJ支持在编译时进行静态织入以及在运行时通过字节码增强进行动态织入。这使得切面逻辑可以在不同的阶段应用到目标代码中。 强大的切面编程能力AspectJ提供了丰富的切面编程能力包括引入新的成员变量和方法到目标类中修改现有的类和方法以及对切点进行动态绑定等。 与Spring集成AspectJ与Spring框架紧密集成可以与Spring AOP无缝协作提供更强大的AOP功能。 总体而言AspectJ是一个功能强大且灵活的AOP框架可以帮助开发人员更好地实现横切关注点的处理。它提供了丰富的特性和语法使得切面编程变得更加简单和直观。无论是在JavaEE应用程序还是在Spring应用程序中AspectJ都是一个非常有用的工具。 1.1 使用AspectJ进行切面编程 下面是一个逐步指南介绍如何使用AspectJ进行切面编程 添加AspectJ依赖在项目的构建文件如Maven的pom.xml或Gradle的build.gradle中添加AspectJ的依赖项。 定义切面类创建一个Java类用于定义切面逻辑。可以使用Aspect注解来标识该类为切面类。 import org.aspectj.lang.annotation.Aspect;Aspect public class MyAspect {// 切面逻辑代码 }定义切点在切面类中使用Pointcut注解定义切点即指定在哪些方法或类上应用切面逻辑。 import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut;Aspect public class MyAspect {Pointcut(execution(* com.example.MyClass.myMethod(..)))public void myPointcut() {} }定义通知在切面类中定义各种通知类型的方法如前置通知、后置通知、环绕通知等。使用Before、After、Around等注解来标识通知类型。 import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before;Aspect public class MyAspect {Before(myPointcut())public void beforeAdvice() {// 在切点方法执行前执行的逻辑} }配置织入根据使用的方式静态织入或动态织入配置编译器或运行时织入器来将切面逻辑织入到目标代码中。 静态织入使用AspectJ编译器在编译期间将切面织入到目标代码中。可以使用AspectJ编译器命令行工具或IDE插件来进行编译。 动态织入在运行时使用AspectJ织入器通过Java命令行参数或配置文件指定织入器。 以上是使用AspectJ进行切面编程的基本步骤。根据具体的需求和场景可以进一步扩展和配置切面逻辑使用AspectJ提供的更多特性和语法。 2. Spring AOP Spring AOPAspect-Oriented Programming是Spring框架提供的一种轻量级的AOP框架。它通过在运行时动态地将切面逻辑织入到应用程序中实现了横切关注点的处理。 以下是Spring AOP的一些主要特点和功能 基于代理的AOPSpring AOP使用代理模式来实现AOP。它通过创建目标对象的代理对象并将切面逻辑织入到代理对象中从而实现对目标对象方法的增强。 切点和通知Spring AOP支持使用切点Pointcut来定义需要应用切面逻辑的连接点例如方法调用或字段访问等。它提供了多种类型的通知Advice包括前置通知Before、后置通知After、返回通知AfterReturning、异常通知AfterThrowing和环绕通知Around以实现在切点处执行的切面逻辑。 自动代理Spring AOP支持自动代理可以根据配置自动创建代理对象并将切面逻辑织入到目标对象中。通过使用EnableAspectJAutoProxy注解或配置文件中的aop:aspectj-autoproxy元素可以启用自动代理功能。 切面的模块化Spring AOP支持将切面逻辑模块化可以将切面逻辑定义为一个独立的切面类以实现切面逻辑的重用和解耦。 与Spring框架集成Spring AOP与Spring框架无缝集成可以与其他Spring特性如依赖注入一起使用提供更强大的功能和灵活性。 不支持跨类的切面织入Spring AOP基于代理模式实现只能对方法级别的连接点进行切面织入不支持跨类的切面织入。 总的来说Spring AOP是一个简单而强大的AOP框架可以帮助开发人员实现横切关注点的处理。它提供了基于代理的AOP机制、切点和通知的灵活组合、自动代理的支持以及与Spring框架的无缝集成。通过使用Spring AOP开发人员可以更轻松地实现日志记录、事务管理、性能监控等横切关注点的功能。 2.1 使用Spring AOP进行切面编程 下面是一个使用注解的示例演示如何使用Spring AOP来记录方法执行时间 引入依赖确保项目中包含Spring AOP的相关依赖。 定义切面创建一个切面类并使用Aspect注解进行标记。 Aspect Component public class LoggingAspect {// 定义切点匹配所有的public方法Pointcut(execution(public * com.example.MyService.*(..)))public void publicMethods() {}// 编写通知在方法执行前和执行后记录执行时间Around(publicMethods())public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {long startTime System.currentTimeMillis();Object result joinPoint.proceed();long endTime System.currentTimeMillis();long executionTime endTime - startTime;System.out.println(joinPoint.getSignature() 执行时间 executionTime ms);return result;} }配置AOP使用EnableAspectJAutoProxy注解启用自动代理。 SpringBootApplication EnableAspectJAutoProxy public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);// ...MyService myService context.getBean(MyService.class);myService.doSomething();// ...} }在上述示例中我们创建了一个切面类LoggingAspect并在其中定义了一个切点publicMethods()它匹配com.example.MyService类中的所有public方法。然后我们使用Around注解编写了一个通知用于在方法执行前和执行后记录执行时间。 通过在应用程序的主类上添加EnableAspectJAutoProxy注解我们启用了自动代理使得Spring能够自动创建代理对象并织入切面逻辑。 当运行应用程序时每次调用MyService类中的方法时切面逻辑将记录方法的执行时间并输出到控制台。 这个示例演示了如何使用注解来定义切面和通知以及如何配置和启用自动代理。通过使用注解我们可以更简洁地定义切面逻辑并将其与特定方法或类关联起来。 2.2 如何决定使用哪种动态代理 在Spring AOP中默认情况下自动代理使用基于Java动态代理Java Dynamic Proxy实现。 Java动态代理是Java语言提供的一种代理机制通过在运行时动态生成代理类和代理对象来实现代理功能。它基于接口Interface来创建代理对象对目标对象的方法进行代理并在代理对象的方法中调用目标对象的方法。 Java动态代理有一个限制即只能代理实现了接口的类。因此如果目标对象没有实现接口Spring AOP将无法使用Java动态代理进行自动代理。 当目标对象实现了接口时Spring AOP将使用Java动态代理来创建代理对象并将切面逻辑织入到代理对象中。 如果目标对象没有实现接口Spring AOP将尝试使用CGLibCode Generation Library来创建代理对象。CGLib是一个强大的代码生成库它通过继承目标类来创建代理对象并使用字节码增强技术来实现代理功能。 总之当目标对象实现了接口时Spring AOP默认使用Java动态代理来创建代理对象。当目标对象没有实现接口时Spring AOP将使用CGLib来创建代理对象。可以通过配置来指定使用哪种代理方式。 2.3 如何通过配置指定代理方式 在Spring中可以通过配置来指定使用哪种代理方式Java动态代理或CGLib。以下是两种常用的配置方式 通过aop:aspectj-autoproxy元素配置 aop:aspectj-autoproxy proxy-target-classtrue/在Spring的配置文件中可以使用aop:aspectj-autoproxy元素来启用自动代理并通过proxy-target-class属性来指定是否使用CGLib代理。将proxy-target-class属性设置为true表示使用CGLib代理设置为false或省略该属性表示使用Java动态代理。 通过EnableAspectJAutoProxy注解配置 Configuration EnableAspectJAutoProxy(proxyTargetClass true) public class AppConfig {// 配置其他Bean和AOP切面 }在Spring的Java配置类中可以使用EnableAspectJAutoProxy注解来启用自动代理并通过proxyTargetClass属性来指定是否使用CGLib代理。将proxyTargetClass属性设置为true表示使用CGLib代理设置为false表示使用Java动态代理。 通过以上配置方式可以灵活地指定使用哪种代理方式。根据具体的需求和场景选择合适的代理方式来实现AOP功能。 2.4 Spring AOP和AspectJ的关系 Spring AOP与AspectJ之间存在一定的关联。Spring AOP可以与AspectJ进行集成利用AspectJ的注解或XML配置来定义切面并通过Spring AOP将切面织入到目标对象中。这样Spring AOP可以结合AspectJ的强大功能和语法实现更灵活和强大的AOP编程。 Spring AOP是通过动态代理实现AOP的它并不直接借助AspectJ的编译器和织入工具。虽然Spring AOP的实现受到了AspectJ的影响并且与AspectJ有很好的集成但Spring AOP并不使用AspectJ的编译器来修改字节码或进行静态织入。 在Spring AOP中切面逻辑是通过动态代理来织入到目标对象中的。Spring AOP使用JDK动态代理或CGLIB动态代理来创建代理对象并在代理对象的方法调用前后织入切面逻辑。这种动态织入的方式使得Spring AOP更加灵活和轻量级但相对于AspectJ而言它在切面编程的能力上可能略有限制。 3. Spring Boot AOP Spring 中的 AOP有接口就用 JDK 动态代理没有接口就用 Cglib 动态代理。 Spring Boot 中的 AOP2.0 之前和 Spring 一样2.0 之后首选 Cglib 动态代理如果用户想要使用 JDK 动态代理需要自己手动配置。 4. 扩展 4.1 AspectJ织入方式详解 AspectJ提供了两种方式来配置织入方式静态织入和动态织入。 静态织入静态织入是在编译期间将切面逻辑织入到目标代码中。要配置静态织入可以使用AspectJ编译器命令行工具或IDE插件。 使用AspectJ编译器命令行工具可以使用ajc命令来编译包含AspectJ切面的代码。在命令行中指定目标代码和切面代码的路径AspectJ编译器会将切面逻辑织入到目标代码中生成织入后的字节码文件。 使用IDE插件常见的Java开发工具如Eclipse、IntelliJ IDEA提供了AspectJ插件可以在IDE中配置AspectJ切面并通过插件进行编译和织入。可以通过插件的配置界面或注解来指定切面逻辑的织入方式。 动态织入动态织入是在运行时通过AspectJ织入器来动态地将切面逻辑织入到目标代码中。要配置动态织入可以通过Java命令行参数或配置文件指定织入器。 Java命令行参数在运行Java程序时可以使用-javaagent参数指定AspectJ织入器织入器会在程序启动时加载并根据配置文件将切面逻辑织入到目标代码中。 配置文件可以创建一个AspectJ配置文件通常是XML格式在配置文件中指定要织入的切面和切点以及织入方式。然后在运行Java程序时指定该配置文件AspectJ织入器会根据配置文件将切面逻辑织入到目标代码中。 无论是静态织入还是动态织入配置织入方式都需要指定切面的位置和目标代码的位置并选择合适的织入时机。具体的配置方式和细节可以根据使用的工具和需求而有所不同。 通过上述介绍希望大家能够明白AspectJ和Spring AOP框架的原理及实现方式以及了解Spring AOP采用了AspectJ的注解但没有采用其织入方式而是通过动态代理的方式JDK动态代理和CGLIB动态代理生成代理类和代理对象。Spring AOP支持自动代理如果目标对象实现了接口则会采用JDK动态代理如果没有实现接口则采用CGLIB动态代理。可以通过配置改变使用哪种动态代理Spring Boot2.0前后的默认配置不同等。 参考 JDK动态代理和CGLib动态代理的对比 Spring Boot 中的 AOP到底是 JDK 动态代理还是 Cglib 动态代理
http://www.sczhlp.com/news/209471/

相关文章:

  • 重庆微信企业网站做网站后端的全部步骤
  • 番禺建设网站公司哪家好做交易网站需要多少钱
  • 四川鸿业建设集团网站贵州网站中企动力建设
  • 网站的数据库做备份厦门做网站建设
  • 南昌网站定制公司哪家好icp网站备案
  • 网站建设费用的请示网站死链怎么办
  • 企业在线设计网站华为手机开发者模式怎么关闭
  • 自己建网站要花多少钱wordpress 转织梦
  • php ajax网站开发问答网站建设
  • 网站做友链专业团队p图
  • 自己搭建个人网站建设网站 请示 报告
  • 自己怎么做VIP视频解网站云南建个网站哪家便宜
  • 个人网站建设规划实践报告网站开发包含网站维护吗
  • 佛山网站设计中心pc网站 手机网站
  • 现在做网站到底需要多少钱济南做网站的好公司有哪些
  • 网站转化率数据库主机wordpress
  • 做网站建设的联系电话二级子域名ip地址查询
  • 网站删除模块专做皮具的网站
  • 英语网站都可以做哪些内容汕头企业网站公司
  • 营销公司网站模板下载云南云南住房和城乡建设厅网站
  • 做租赁哪个网站好网站建设网站需要什么软件有哪些
  • 河北住房和城乡建设厅网站卡系统网站设计
  • 海口网站建设策划方案北京做网站哪家好
  • 六安市住房和城乡建设局网站相机网站建设规划书
  • 公司网站文章的排版网页设计实训总结2000字
  • 肇庆广宁住房和城乡建设部网站my21777域名查询
  • 2025年10月北京律师行业服务能力综合对比与排行榜单
  • 2025年10月北京律师行业综合实力对比与专业服务排行榜
  • 2025年10月北京劳动争议律所综合实力排行与深度评测分析
  • 怎样制作网站站点模板王字库