• 自定义注解实现aop


    设备物联的项目有个需求,需要在获取到设备信息后判断设备是否异常信息,想了一下决定用aop来是先,接收到设备信息需要将设备信息插入到数据库,因此,将切入点定义到插入的方法之上;

    项目使用的架构是ssm架构,不做赘述

    在spring-content.xml中增加如下配置

     
        <aop:aspectj-autoproxy />
        <!--强制使用cglib-->
        <aop:aspectj-autoproxy proxy-target-class="true"/>

    编写自己的自定义注解:

    **
     *
     * 自定义注解  拦截service 设备状态信息保存
     * Created by lewKay on 2017/3/8.
     */
    
    @Target({ElementType.PARAMETER, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface WaringMessagePush {
        String description() default "";
    }

    编写切面类:

    **s
     * Created by LewKay on 2017/3/7.
     * 切面类
     * 切入到报警信息如果有预警就在此处插入到数据库
     */
    @Aspect
    @Service
    public class SendWaringMessageAop{
    
        //将报警信息保存到数据库
        @Autowired
        private WaringMessageService waringMessageService;
        //切入点
        @Pointcut("@annotation(com.jctl.cloud.common.annotation.waring.WaringMessagePush)")
        public void waringMessagePushAspect(){
        }
        /**
         * 前置通知  将报警信息保存到数据库
         */
        @Before("waringMessagePushAspect()")
        public void addWaringMessage(JoinPoint joinPoint){
    
            try {
                System.out.println("********************************这里是前置通知:传递信息为");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    在具体的service方法上加上自己的注解:

       @Transactional(readOnly = false)
        @WaringMessagePush(description = "描述信息,测试用的")   //自定义的注解
        public void saveOrUpdate(ResultSet resultSet,String relayId) {
            List<String> clintMacs = resultSet.getGatewayResultSet().getClientMacList();
            if (clintMacs == null) {
                return;
            }
            for (String clintMac : clintMacs) {
                Node temp = nodeDao.getByNodeMac(clintMac);
    
                if(temp==null){
                    Node newNode = new Node(clintMac,relayId,new Date());
                    save(newNode);
                }
            }
        }

    测试一下:

    2017-03-08 11:44:13,415 DEBUG [modules.sys.dao.LogDao.insert] - <==    Updates: 1
    2017-03-08 11:44:18,484 DEBUG [cloud.modules.sys.interceptor.LogInterceptor] - 开始计时: 11:44:18.484  URI: /manager/waring/waringCycle/form
    ********************************这里是前置通知:传递信息为
    2017-03-08 11:44:18,489 DEBUG [manager.waring.dao.WaringCycleDao.get] - ==>  Preparing: SELECT a.id AS "id", a.node_num AS "nodeNum", a.property AS "property", a.max AS "max", a.min AS "min", a.cycle AS "cycle", a.create_by AS "createBy.id", a.create_date AS "createDate", a.update_by AS "updateBy.id", a.update_date AS "updateDate" FROM jc_waring_cycle a WHERE a.id = ? 
    2017-03-08 11:44:18,489 DEBUG [manager.waring.dao.WaringCycleDao.get] - ==> Parameters: 2(String)
    2017-03-08 11:44:18,491 DEBUG [manager.waring.dao.WaringCycleDao.get] - <==      Total: 1

    aop已经执行,下一步获取插入的参数,判断是否超出预警值这里就不做赘述了

  • 相关阅读:
    Python-24-Django(Model Form、Ajax、上传文件、KindEditor)
    P23-Django-model、Form补充 & 序列化
    P22-Django-Session、CSRF、Form、信号
    21-Python-Django进阶补充篇
    Python-Django进阶
    Python-18-Django 基础篇
    17-前端开发之jQuery
    15-前端开发之JavaScript
    14-前端开发之CSS
    14-前端开发之HTML
  • 原文地址:https://www.cnblogs.com/lewskay/p/6518714.html
Copyright © 2020-2023  润新知