自定义注解2-切面

自己自定义注解测试

定义注解
import java.lang.annotation.*;

/**
 * Created by cht on 2017-10-30.
 */
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CustomAnnotation {
    String name();
}
定义切面
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.opsteel.wcyl.commons.base.annotation.CustomAnnotation;
import org.opsteel.wcyl.commons.base.annotation.TargetDataSource;
import org.springframework.stereotype.Component;

/**
 * Created by cht on 2017-10-30.
 */
@Aspect
@Component
public class CustomAnnotationAspect {

    @Before("@annotation(ds)")
    public void println(JoinPoint point, CustomAnnotation ds) throws Exception {
        System.out.println("我是测试与验证注解方法的-------before-----"+ds.name());
    }

    @After("@annotation(ds)")
    public void println1(JoinPoint point, CustomAnnotation ds) {
        System.out.println("我是测试与验证注解方法的-------after-----"+ds.name());
    }

}
使用

在类或方法上使用

 @CustomAnnotation(name = "SSSSSSSSSSS")
public Page<MaChangeVo> findchangeMap(Page<MaChangeVo> page, HashMap<String, Object> map) {
        page.setRecords(this.baseMapper.fingchangepage(page,map));
        return page;
}
验证
我是测试与验证注解方法的-------before-----SSSSSSSSSSS
2017-10-30 09:48:36.432 DEBUG 13340 --- [io-8080-exec-46] o.o.w.m.c.m.M.fingchangepage             : ==>  Preparing: SELECT COUNT(1) FROM ( select max(m.cuname)tocuname,max(a.cuname)fromcuname,max(m.createtime)createtime,max(m.blno)blno,max(m.status)status,sum(d.changeweight)changeweight from ma_change m left join ma_change_dt d on m.id=d.blid left join bs_customer a on a.custid=m.fromcustid left join wc_order o on o.orderno=m.orderno WHERE m.status =? and m.changetype=1 group by m.blno order by createtime desc ) TOTAL 
2017-10-30 09:48:36.448 DEBUG 13340 --- [io-8080-exec-46] o.o.w.m.c.m.M.fingchangepage             : ==> Parameters: 1(Integer)
2017-10-30 09:48:36.495 DEBUG 13340 --- [io-8080-exec-46] o.o.w.m.c.m.M.fingchangepage             : ==>  Preparing: select max(m.cuname)tocuname,max(a.cuname)fromcuname,max(m.createtime)createtime,max(m.blno)blno,max(m.status)status,sum(d.changeweight)changeweight from ma_change m left join ma_change_dt d on m.id=d.blid left join bs_customer a on a.custid=m.fromcustid left join wc_order o on o.orderno=m.orderno WHERE m.status =? and m.changetype=1 group by m.blno order by createtime desc LIMIT 0,10 
2017-10-30 09:48:36.510 DEBUG 13340 --- [io-8080-exec-46] o.o.w.m.c.m.M.fingchangepage             : ==> Parameters: 1(Integer)
2017-10-30 09:48:36.557 DEBUG 13340 --- [io-8080-exec-46] o.o.w.m.c.m.M.fingchangepage             : <==      Total: 10
我是测试与验证注解方法的-------after-----SSSSSSSSSSS
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用自定义注解定义切面,你可以结合使用AspectJ和自定义注解。以下是一个示例代码: 1. 首先,定义一个自定义注解,用于标记需要应用切面的方法: ```java import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface LogExecutionTime { } ``` 2. 创建一个切面类,使用AspectJ注解来定义切面逻辑: ```java import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component; @Aspect @Component public class LoggingAspect { @Around("@annotation(LogExecutionTime)") 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() + " executed in " + executionTime + "ms"); return result; } } ``` 在上面的示例中,我们使用`@Around`注解来定义一个环绕通知,它会在带有`@LogExecutionTime`注解的方法执行前后进行处理。在环绕通知中,我们记录了方法的执行时间,并打印出来。 3. 在需要应用切面的方法上添加`@LogExecutionTime`注解: ```java @Service public class MyService { @LogExecutionTime public void myMethod() { // 方法实现 } } ``` 在上面的示例中,我们在`myMethod`方法上添加了`@LogExecutionTime`注解。 4. 配置AspectJ和扫描切面: 如果使用Spring框架,你需要在配置文件中启用AspectJ自动代理,并扫描切面类。 XML配置: ```xml <aop:aspectj-autoproxy/> <context:component-scan base-package="com.your.package"/> ``` Java配置: ```java @Configuration @EnableAspectJAutoProxy @ComponentScan(basePackages = "com.your.package") public class AppConfig { // 配置其他Bean } ``` 使用上述示例代码,你可以定义自己的切面,通过自定义注解来标记需要应用切面的方法,并在切面中定义相应的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值