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

易优cms怎么样温州seo教程

易优cms怎么样,温州seo教程,欧派网站谁做的,自己做报名网站Spring AOP是Spring框架中的一个模块,它允许开发人员使用面向切面编程(AOP)的思想来解耦系统的不同层次。 Spring AOP的核心概念是切面(aspect)、连接点(join point)、通知(advice)、切点(pointcut)和引入(introduction)。 切面(aspect):切面是一个类, 它…

Spring AOP是Spring框架中的一个模块,它允许开发人员使用面向切面编程(AOP)的思想来解耦系统的不同层次。

Spring AOP的核心概念是切面(aspect)、连接点(join point)、通知(advice)、切点(pointcut)和引入(introduction)。

  • 切面(aspect):切面是一个类, 它包含了通知(advice)和切点(pointcut)。
  • 连接点(join point):在AOP中,连接点是程序执行的某个时间点,例如方法调用、异常抛出、对象实例化等。
  • 通知(advice):在连接点上执行的代码片段,它们包括before、after、afterReturning、afterThrowing和around五种类型。
  • 切点(pointcut):在程序执行时选择哪些连接点执行通知的表达式,例如execution(* com.example.demo.*(..))表示匹配com.example.demo包下的任意方法。
  • 引入(introduction):在不修改现有类代码的情况下,向现有类添加新方法或属性。

Spring AOP底层使用动态代理和字节码生成来实现。切面由通知和切点组成,连接点是程序执行的某个时间点,切点根据表达式匹配连接点,通知是在连接点上执行的代码片段,在方法调用前或调用后执行某些操作。

Spring AOP的优点是可以通过配置实现解耦,不用修改经常变动的业务逻辑代码,而且可以重用通知,降低代码冗余程度。

以下是一个使用Spring Boot AOP实现日志记录的例子:

1.创建一个Spring Boot项目并添加如下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2.定义一个"UserService"接口和一个实现类"UserServiceImpl",实现类中包含一个方法"getUserById":

public interface UserService {User getUserById(long id);
}@Service
public class UserServiceImpl implements UserService {@Overridepublic User getUserById(long id) {System.out.println("调用getUserById方法,id=" + id);return new User(id, "张三");}
}

3.定义一个切面"LogAspect",

使用注解@Aspect标识切面,

使用@Pointcut定义切点,

使用

@Before、

@After、

@AfterReturning、

@AfterThrowing、

@Around注解定义通知:

@Aspect
@Component
public class LogAspect {@Pointcut("execution(* com.example.demo.service.UserService.*(..))")public void userServicePointcut() {}@Before("userServicePointcut()")public void before(JoinPoint joinPoint) {System.out.println("调用" + joinPoint.getSignature().getName() + "方法");}@AfterReturning(pointcut = "userServicePointcut()", returning = "result")public void afterReturning(JoinPoint joinPoint, Object result) {System.out.println("调用" + joinPoint.getSignature().getName() + "方法完成,返回值=" + result);}@AfterThrowing(pointcut = "userServicePointcut()", throwing = "exception")public void afterThrowing(JoinPoint joinPoint, Exception exception) {System.out.println("调用" + joinPoint.getSignature().getName() + "方法出现异常,异常信息=" + exception.getMessage());}
}

在上面的切面中,我们使用@Pointcut注解定义切点,使用@Before、@AfterReturning、@AfterThrowing等注解定义通知,在通知中使用JoinPoint获取方法签名、参数等信息,输出日志。

4.运行应用程序并测试:

@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/user/{id}")public User getUser(@PathVariable long id) {return userService.getUserById(id);}
}

在控制台中可以看到如下输出:

调用getUserById方法,id=1
调用getUserById方法完成,返回值=User [id=1, name=张三]

匹配方法

Pointcut是基于表达式的描述符,用于指定应该在哪些方法上执行通知。Pointcut表达式可以使用AspectJ的语法,也可以使用Spring AOP的语法。

以下是常用的Pointcut表达式:

  1. execution:使用该表达式匹配方法执行的切点。
  • execution(public * com.example.demo.service.UserService.*(..)):匹配com.example.demo.service.UserService类中所有public修饰符的方法。

  • execution(* com.example.demo.service..(..)):匹配com.example.demo.service包下所有类的任意方法。

  • execution(* com.example.demo.service...(..)):匹配com.example.demo.service包以及其子包下所有类的任意方法。

  1. within:使用该表达式匹配指定类型的切点,包括该类型的子类型。
  • within(com.example.demo.service.*):匹配所有com.example.demo.service包中的类型。

  • within(com.example.demo.service..*):匹配com.example.demo.service包以及其子包中的所有类型。

  1. annotation:使用该表达式匹配带有指定注解的切点。
  • @annotation(org.springframework.web.bind.annotation.RequestMapping):匹配带有@RequestMapping注解的方法。

  • @within(org.springframework.stereotype.Service):匹配带有@Service注解的类中的所有方法。

  1. args:使用该表达式匹配带有指定参数类型的切点。
  • args(java.lang.String):匹配一个参数类型为String的方法。

  • args(java.lang.String, ...):匹配至少一个参数类型为String的方法。

  1. bean:使用该表达式匹配指定名称或类型的bean的切点。
  • bean(userService):匹配名称为userService的bean。

  • bean(userService*):匹配名称以userService开头的bean。

除了以上的表达式外,还有很多其他的表达式,可以根据具体的需求选择使用。需要注意的是,在使用Pointcut表达式时,需要注意匹配的粒度,匹配过于精确会导致无法匹配到需要的切点,匹配过于宽泛则会匹配到不需要的切点。

http://www.yidumall.com/news/8599.html

相关文章:

  • 做游戏出租的网站百度竞价点击价格公式
  • 电子商务网站加盟帮收款的接单平台
  • 石材做网站细节windows永久禁止更新
  • 郑州网站建设找三牛网络推广费用一般多少
  • 温州专业微网站制作报价crm系统网站
  • 装修网站平台推荐长沙网站seo收费
  • wordpress大图插件seo优化步骤
  • 优秀的网页设计网站除了91还有什么关键词
  • 做原型的网站舆情网站直接打开
  • 最少收藏三个以上的本地域名网站优化关键词排名公司
  • 网站分析 实例中山口碑seo推广
  • 怎么利用百度云盘做网站搜索引擎优化的特点
  • 做网站报价单百度一下就知道手机版
  • 公司官方网站怎么做网站seo优化建议
  • 咸宁做网站优秀的软文广告欣赏
  • 广州做鞋的网站新手怎么做销售
  • 安全的定制型网站建设360优化大师下载安装
  • 公司做网站费用会计处理搜索引擎收录入口
  • 建公司网站的公司广东疫情防控措施
  • 手机开发网站教程今日油价92汽油
  • 郑州网站开发公司指数是指什么
  • 网站建设常用的开发语言介绍seo学徒招聘
  • ui设计师的工作内容包括哪些短视频seo排名加盟
  • 韩国今天新闻刘连康seo培训哪家强
  • 欧洲十大服务器的推荐搜索优化推广公司
  • 外贸网站建设需求国际军事新闻最新消息视频
  • 泉州响应式网站建设企业网络推广方案策划书
  • 余姚做网站设计关键词优化公司排名
  • 厦门博客网站制作舆情服务公司
  • 赣州快云科技有限公司google优化推广