当前位置: 首页 > 编程日记 > 正文

spring -- 自定义注解

我们直接通过代码解释自定义注解的使用及各个含义

package com.sysware.cloud.dts.annotation;import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Inherited
@Documented
public @interface DtTransactional {/** Whether need to rollback*/public boolean includeLocalTransaction() default true;public boolean confirmMethodExist() default false;/** Allow [confirmMethod] is null if [confirmMethodExist] is false*/public String confirmMethod() default "";public String cancelMethod() default "";}

说明1:@Target、@Retention、@Inherited、@Documented为元注解(meta-annotation),它们是负责注解其他注解的。

1:Target注解 :指明注解支持的使用范围,取值可以参考ElementType :

  • ElementType.TYPE //类、接口、枚举
  • ElementType.FIELD //属性
  • ElementType.METHOD //方法
  • ElementType.PARAMETER //参数
  • ElementType.CONSTRUCTOR //构造器
  • ElementType.LOCAL_VARIABLE //局部变量
  • ElementType.ANNOTATION_TYPE //注解
  • ElementType.PACKAGE //包

2:Retention注解 :指明注解保留的时间长短,取值参考枚举RetentionPolicy :

  • SOURCE //源文件中保留
  • CLASS //class编译时保留
  • RUNTIME //运行时保留

3:Inherited 注解:指明该注解类型被自动继承。如果一个annotation注解被@Inherited修饰,那么该注解作用于的类的子类也会使用该annotation注解。

4:Document 注解:指明拥有这个注解的元素可以被javadoc此类的工具文档话。

说明2:在自定义注解中定义的属性有 default ,使用该注解的时候可以不填写该属性,否则该属性为必填,不填会提示错误。

上面自定义注解就定义好了,接下来就可以在Target指定的范围内使用该注解了,比如上面定义的注解是使用在 METHOD 上的,可以这样使用

package com.sysware.cloud.dts.service.impl;import com.sysware.cloud.commons.util.idwork.LongIdGenerator;
import com.sysware.cloud.dts.annotation.DtTransactional;
import com.sysware.cloud.dts.entity.PointEntity;
import com.sysware.cloud.dts.repository.PointRepository;
import com.sysware.cloud.dts.service.PointService;
import com.sysware.cloud.po.CriteriaQuery;
import com.sysware.cloud.service.impl.BaseServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;
import java.util.concurrent.CancellationException;

@Service
public class PointServiceImpl extends BaseServiceImpl<PointEntity,PointRepository,Long> implements PointService {@Override@Transactional@DtTransactional(cancelMethod = "cancel")public PointEntity add(PointEntity entity) {//根据用户ID查询是否积分记录,没有则生成积分,有的话,则修改添加积分PointEntity pointEntity = super.repository.findPointEntitiesByUserId(entity.getUserId());if(pointEntity==null){entity.setId((LongIdGenerator.getId()));return super.repository.save(entity);}else {pointEntity.setPoint(pointEntity.getPoint()+entity.getPoint());return super.repository.save(pointEntity);}}public PointEntity cancel(PointEntity entity) {PointEntity pointEntity = super.repository.findPointEntitiesByUserId(entity.getUserId());if (pointEntity != null) {pointEntity.setPoint(pointEntity.getPoint() - entity.getPoint());return super.repository.save(pointEntity);}return null;}
}

最后就是如何解析自定义注解了, 解析过程可以使用AOP统一处理,参考我的博客spring --解析自定义注解SpringAOP(配合@Aspect

转载于:https://www.cnblogs.com/wenq001/p/9144278.html

相关文章:

angular 字符串转换成数字_蓝盟IT外包,Python算法的一般技术和嵌入式库|python|字符串|key|算法|调用...

近年来&#xff0c;随着python着火&#xff0c;python也开始受到很多程序员的喜爱。 很多程序员已经开始使用python作为第一语言。最近在python上刷问题时&#xff0c;我想去找python的刷问题常用库api和刷问题技术。 和c的STL库文档一样&#xff0c;但很遗憾没有找到。 因此&a…

Mapping Persistence Classes 笔记2---ValueType的形式和映射

2010年5月17日 简介&#xff1a; 前面的笔记着重讲解了实体类以及其class-mapping options&#xff0c;本章笔记将关注值类型的形式以及其OR映射选项。 值类型一般可分为两类&#xff1a;JDK类型和用户自定义类型。本章首先从实体类的使用JDK类型的properties开始&#xff0c;讲…

安装wampserver及配置php,phpmyadmin遇到的问题及解决方法

wampserver 安装好以后&#xff0c;打开&#xff0c;发现appache无法启动&#xff0c;查了一下&#xff0c;发现是前安装过iis&#xff0c;iis使用80端口&#xff0c;打开httpd.conf&#xff0c;把里面所有的80都改成了81&#xff0c;然后appache就可以正常启动了。 再配置wamp…

as一种模拟输入效果

这个小程序展现的是一种模拟输入的效果&#xff0c;比如你在键盘上随便输入什么&#xff0c;在屏幕上就会依次的显示“这句话不是我输入的&#xff0c;呵呵”。比较有意思。 var s:Sprite new Sprite; var t:TextField new TextField(); var i:Number0; var myText:String&qu…

signature验证/salt验证/token验证的作用

1.salt验证: salt是随机生成的一串字符,salt验证的作用是将生成的salt与加密的密码密文拼接后再次加密存储 这样可以是存储在数据库中的密码更加安全 2.signature验证: I、将token, timestamp, nonce, encrypt的内容按照大小字母顺序排列 II、按顺序将列表中排序号的内容拼接成…

算法导论课后习题解析 第四章 上

4.1-1 返回只包含绝对值最小的元素的子数组。 4.1-2 Maximun-Subarray(A)max -infinityfor i 1 to A.lengthsum 0for j i to A.lengthsum sum A[i]if sum > maxmax sumlow ihigh jreturn (low, high, max)每次内循环都利用上次累加的结果&#xff0c;避免重复运算…

win10商店打不开_科技资讯:Win10系统电脑的应用商店老是打不开还闪退怎么办

最近关于Win10系统电脑的应用商店老是打不开还闪退怎么办在网上的热度是非常高的&#xff0c;很多网友们也都是非常关注Win10系统电脑的应用商店老是打不开还闪退怎么办这个事情&#xff0c;为此小编也是在网上进行了一番搜索查阅相关的信息&#xff0c;那么如果说有感兴趣的网…

[原]tornado源码分析系列(三)[网络层 IOLoop类]

引言&#xff1a;由于都是在工作当中抽出时间看源代码&#xff0c;所以更新速度比较慢&#xff0c;但是还是希望通过对好的源码的分析和探讨&#xff0c;大家相互学习&#xff0c;发现不好的地方共同讨论。 上次讲了IOLoop中的几个重要的方法&#xff0c;inistance() 和 add_ha…

参悟JavaScript

引子 编程世界里只存在两种基本元素&#xff0c;一个是数据&#xff0c;一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。 数据天生就是文静的&#xff0c;总想保持自己固有的本色&#xff1b;而代码却天生活泼&#xff0c;总想改变这个世…

SQL数据库无法附加 系统表损坏修复 数据库中病毒解密恢复

SQL数据库无法附加 系统表损坏修复 数据库中病毒解密恢复 开发此工具是为了 让手工恢复数据库物理故障时 更加简单便捷直观, 本工具用于物理修复独立处理大部分问题以及与DBCC配合完成修复各种数据库错误.特别是针对大型数据库上百G 上TB数据库&#xff0c;节约大量时间精力。 …

ODP.NET调用存储需要使用事务

今天发生在用ODP.NET调整一个存储过程时发生了两个奇怪的错误。 ORA-08103: object no longer exists ora-01410: invalid rowid网上都说是索引块有错误什么的&#xff0c;我索引也重建&#xff0c;表也重建了&#xff0c;但还是不行。 奇怪的是我直接测试存储过程是有结果的。…

HDU-1698-Just a Hook

HDU-1698-Just a Hook http://acm.hdu.edu.cn/showproblem.php?pid1698 还是成段更新线段树 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100005 struct cam {int x;int y;int sum;int val; }list[N*4]; void build(int k,int x,in…

sketchup 255个su常用插件)_SketchUp领域的知乎,有胆来问!

你知道知乎、豆瓣、果壳……但你可能不知道【问吧】这是一个 SketchUp 领域的知乎(点击文末“阅读原文”可直接进入【问吧】)你可以找到关于 SketchUp 的任何话题&#xff1a;SketchUp、Vray、建模、插件、曲面、SUAPP、组件、导入、材质、渲染、导出、贴图、材质、错误报告、L…

js简单的抽屉菜单

闲暇时间用Jquery写了一个js简单的抽屉菜单。。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" > <…

checkedListBox的使用

1.添加项checkedListBox1.Items.Add("蓝色"); checkedListBox1.Items.Add("红色"); checkedListBox1.Items.Add("黄色");2. 判断第i项是否选中,选中为true,否则为falseif&#xff08;checkedListBox1.GetItemChecked(i)&#xff09;{return t…

Windows Phone开发(39):漫谈关键帧动画上篇 转:http://blog.csdn.net/tcjiaan/article/details/7550506...

尽管前面介绍的几种动画会让觉得很好玩了&#xff0c;但是&#xff0c;不知道你是否发现&#xff0c;在前面说到的一系列XXXAnimation中&#xff0c;都有一个共同点&#xff0c;那就是仅仅针对两个值的目标值之间产生动画&#xff0c;如果使用By&#xff0c;将在原值和加上By后…

性能定位常用命令整理

统计每秒钟Nginx收到多少请求&#xff1a; cat access.log | grep 2019:20:19:50 | wc -l 解释&#xff1a;access.log为Nginx的日志&#xff0c;通过Nginx的配置文件nginx.conf查看日志文件名称和位置&#xff0c;2019:20:19:50 表示获取20点19分50秒接收的请求数&#xff0c;…

4块硬盘做raid几_HP-P4500存储RAID硬盘离线数据恢复案例

在这里北亚小编分享一篇关于HP-P4500存储RAID硬盘离线数据恢复案例&#xff0c;经客户描述&#xff1a;一台HP-P4500的存储系统&#xff0c;底层是12块1TB的硬盘组的RAID。其中每6个1TB的盘一组&#xff0c;第一组的前面一部分组了一个RAID01&#xff0c;是存放HP-P4500嵌入式系…

十个利用矩阵乘法解决的经典题目

出自matrix67.com 好像目前还没有这方面题目的总结。这几天连续看到四个问这类题目的人&#xff0c;今天在这里简单写一下。这里我们不介绍其它有关矩阵的知识&#xff0c;只介绍矩阵乘法和相关性质。 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中&…

maven生命周期理解

你可以仅仅调用clean来清理工作目录&#xff0c;仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。 知道了每套生命周期的大概用途和相互关系以后&#xff0c;来逐个详细看一下每套生命周期&#xff0c;Clean和Site相对比较简单&…

安装envi出现cannot find lincese_Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题)

0. 前言直接用 cuda安装文件同时安装 NVIDIA 驱动和 CUDA&#xff0c;没有单独安装更高版本的 NVIDIA 驱动&#xff1b;为避免浪费显存&#xff0c;图形化界面显示是在Intel 集显环境下&#xff0c;NVIDIA 独显做计算&#xff1b;循环登陆问题是因为安装时没有加 --no-opengl-l…

POJ1067_取石子游戏_威佐夫博弈

/* *State: 1067 Accepted 176K 16MS C 435B *题目大意&#xff1a; * 威佐夫博弈 *解题思路&#xff1a; * 略。 */ #include <iostream> #include <stdio.h> #include <cmath> using namespace std;int main(void) {int big,…

cuda cudnn pytorch版本对应关系

1. cuda和cudnn版本对应关系 https://developer.nvidia.com/rdp/cudnn-archive#a-collapse742-10 转载于:https://www.cnblogs.com/yeran/p/11345990.html

【转载】WinCE OAL架构分析

转载自&#xff1a;http://blog.csdn.net/nanjianhui/article/details/3830452 我个人认为OAL应该是WinCE BSP中最为重要的一个模块了&#xff0c;简单回顾一下&#xff0c;WinCE BSP由Bootloader&#xff0c;Drivers&#xff0c;OAL和配置文件组成。Bootloader一般指EBOOT&…

centos7 中搭建gitlab

1、在virtual box中新建一个虚拟机 2、gitlab ce&#xff08;community版本&#xff09;地址&#xff1a;https://about.gitlab.com/installation/#centos-7?versionce 如果在执行如下安装命令提示无法连接&#xff0c; sudo EXTERNAL_URL"http://gitlab.example.com&quo…

androidstudio jni开发_初识NDK开发(一)

“ 前言&#xff1a;初学逆向 请多多指教 昨天在看雪论坛发了篇文章&#xff0c;被标记了优秀&#xff0c;不由得感叹 这一个月没有白学&#xff01; 剩下还有11个月 冲了”学习到的内容—1、了解了什么是NDK&#xff0c;以及在android studio中的环境搭建中注意的事项2、pthre…

http编程学习(C#)

《HTTP Programming Recipes for C# Bots》 第一章 选择GET还是POST取决于传送到服务器的数据的多少。GET传送的数据少&#xff0c;POST几乎对传送的数据无限制。 It is important to note that only one physical file is transferred per HTTP request. 每次HTTP请求只传送了…

服务器远程免密登录

1. 生成本地密钥 ssh-keygen2. 将密钥上传到服务器 ssh-copy-id -p port username192.128.128.128 3. 创建登录脚本 ssh -p port username192.128.128.128 转载于:https://www.cnblogs.com/yeran/p/11348045.html

如何触发AspxGridview的PageIndexChanged 客户端事件

&#xff1f;最近在使用AspxGridview控件时&#xff0c;遇到一个问题&#xff0c;就是在触发AspxGridview分页事件之后&#xff0c;需要在执行js事件&#xff0c;找了好久&#xff0c;在官网上找到处理的办法。 就是在cs页面设置变量在触发PageIndexChanged事件后&#xff0c;改…

Mysql 多表使用 Case when then 遇到的坑

前言&#xff1a; 在做一个订单导出时&#xff0c;遇到多表都含有state这个字段&#xff0c;含有多个状态首先想到的是&#xff1a; case colume when condition then result when condition then result when condition then result else result end 当正常试着写代码时会发现…