Java项目中一些注解的作用

1. @PostConstruct

@PostConstruct 是一个Java注解,它用于指示一个方法应在其所在的类初始化之后立即执行。通常将它用于在依赖注入完成后执行一些初始化工作或设置。当容器创建一个带有 @PostConstruct 注解的 bean 时,将会在依赖注入完成后立即调用带有该注解的方法。

例如,在一个使用Spring框架的应用中,可以使用 @PostConstruct 注解来标记一个方法作为初始化方法,以便在依赖注入完成后执行一些设置操作,如初始化某些属性或建立数据库连接。

下面是一个使用 @PostConstruct 注解的示例:

@Component
public class MyBean {

    private String message;

    @PostConstruct
    public void init() {
        message = "Hello, World!";
        // 执行其他初始化操作
    }

    // 其他方法和属性
}

在上面的例子中,当容器创建 MyBean 实例并完成依赖注入后,将调用带有 @PostConstruct 注解的 init() 方法,从而设置 message 属性并执行其他初始化操作。

参考:SpringBoot @PostConstruct和@PreDestroy使用详解

2. @Pointcut

@Pointcut 是一个在Spring AOP(面向切面编程)中使用的注解。它用于定义切入点,即在程序执行过程中需要进行横切的方法或代码片段的位置。切入点声明了哪些方法可以被AOP代理捕获和处理。

使用@Pointcut注解可以将切入点表达式与切入点命名绑定在一起。切入点表达式是一个规则,用于匹配程序中的特定方法。通过指定切入点表达式,开发人员可以定义需要拦截、增强或修改的方法。

示例:

@Pointcut("execution(* com.example.service.*.*(..))")
public void myPointcut() {
    
    }

上述示例将myPointcut()定义为一个切入点,它匹配com.example.service包中的所有方法。

通过使用@Pointcut注解,开发人员可以更方便地管理切入点,并在需要的地方进行引用,以便将横切逻辑应用到程序的特定位置。

2.1 @Pointcut使用例子

当使用Spring AOP时,我们可以将@Pointcut注解用于定义一个切入点表达式,然后在通知(Advice)中引用该切入点。下面是一个示例:

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class LoggingAspect {
    
    
    
    @Pointcut("execution(* com.example.service.*.*(..))")
    public void myPointcut() {
    
    }
    
    @Before("myPointcut()")
    public void beforeMethod() {
    
    
        System.out.println("前置通知:在方法执行之前执行");
    }
    
    // 其他通知方法...
}

上述示例中,我们定义了一个名为myPointcut()的切入点,它匹配了com.example.service包中的所有方法。然后,我们可以在通知方法(比如beforeMethod())上使用切入点表达式来指定将这个通知应用到哪些方法上。

在上面的示例中,beforeMethod()方法使用了@Before注解,该注解表示该方法是一个前置通知,在切入点匹配的方法执行之前执行。@Before("myPointcut()")中的myPointcut()引用了我们之前定义的切入点。

通过这样的方式,我们可以将通知应用到特定的方法上,实现横切关注点的逻辑。在此示例中,我们在每个匹配的方法执行之前打印一条消息作为前置通知。

3. @annotation 注解的作用

Annotation概念及作用

4.@Aspect注解

@Aspect注解

5. @Around

在Java中,@Around 注解用于在方法执行前后执行额外的逻辑。它是Spring框架中的一个切面注解,用于声明一个方法或者类是一个切面。

使用 @Around 注解的方法将会在目标方法执行前后运行。该方法可以拥有一个 ProceedingJoinPoint 参数,通过调用 proceed() 方法来实际执行目标方法。可以通过在 @Around 注解的方法中编写额外的代码,例如记录日志、处理异常、追踪方法执行时间等。

下面是一个示例代码,演示了使用 @Around 注解的方法:

@Aspect
@Component
public class LoggingAspect {
    
    
  
    @Around("execution(* com.example.myapp.service.*.*(..))")
    public Object logMethodExecutionTime(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() + " executed in " + executionTime + "ms");
        
        return result;
    }
}

在上述示例中,logMethodExecutionTime 方法使用了 @Around 注解,它会在 com.example.myapp.service 包下的所有方法执行前后记录方法的执行时间。

总的来说,@Around 注解可以用于在方法执行前后执行一些通用的逻辑,从而实现一些横切关注点的功能。在Spring框架中,切面通常被用于处理日志、事务管理、安全性检查等方面。

// TODO

猜你喜欢

转载自blog.csdn.net/Blue_Pepsi_Cola/article/details/131764683