java 注解问题,定义了注解,怎么实现一些处理逻辑

白小衣 发布于 2019/02/15 13:18
阅读 2K+
收藏 0

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

看了几篇文章,都说的是怎么定义注解,注解上的几个元注解怎么用,但我想了解的是,

定义了注解,怎么让注解发挥业务逻辑作用,比如spring里的@Transactional可以监控方法异常信息并实现回滚逻辑。这个注解的处理逻辑是怎么产生怎么触发的呢?我想自己定义个注解并实现类似处理逻辑应该怎么写?谢谢

加载中
0
独孤晓林

spring 中??用aop做切面候校验是否有你自己的主注解就好了!

独孤晓林
该评论暂时无法显示,详情咨询 QQ 群:点此入群
独孤晓林
回复 @白小衣 : 纯servlet写的?自己封mvc架构出来就行了!不然类不自己管理很麻烦的!
白小衣
白小衣
回复 @独孤晓林 : 纯粹的jse项目,没用到spring框架,里面要实现这样类似的注解怎么写呢
独孤晓林
回复 @白小衣 : 比如???
白小衣
白小衣
不一定是spring里
0
漆黑的夜漫天的星
漆黑的夜漫天的星

        看了你的问题,我曾经也有这样的困惑,自定义注解很简单,怎么让自己自定义的注解发生作用,spring中也引入了很多自定义的注解,比如@Transactional ,这些注解是为什么加在某个方法上,在执行这个方法时就会开启、提交事务。先说说spring的一些注解的业务逻辑是怎么触发的吧,首先,每一个事物从初生、成长到消失,这算是一个生命周期,程序从运行到结束会有一个生命周期,不管是jse、还是jee,只要使用了spring,就会加载spring,,使用了spring后,伴随程序的生命周期,spring也会有一个自己的生命周期,当程序运行结束,spring的生命周期也伴随结束,就拿@Transactional举例吧,如果这个注解加一个类上,就是声明这个类的所有方法会加上事务控制,如果加在一个类的一个方法上,当然包含这个方法的类要在spring容器里管理中,如果这个方法没有被spring管理,方法加上注解事务也是不会起效的。@Component这个注解加在一个类上,那程序在加载spring时就会把这个类交给spring来管理,这和在xml中配置一个bean,然后在程序运行时加载配置文件的作用是一样的,所以在程序的生命周期中,这时spring的生命周期也还没有结束,执行到包含有spring注解时,这时涉及到了java两个个重要特性,反射和动态代理,此时会生成一个代理类,并且可以在被代理方法执行前或后,做一些其他事情,方法上加@Transactional ,那么在执行到该方法前,探测到有这个注解,那么就生成代理,在执行代理方法前会先开启事务,然后执行方法体内容,执行完提交事务。开启事务、提交事务这些逻辑是spring帮忙做的,是通过反射触发的,然后具体怎么实现就是是动态代理。现在很多项目都使用了spring,而且spring的功能也很完善、扩展也比较好,自定义的注解也可以放到spring的生命周期里处理。当然,我就是不想用spring,怎么办呢。那么spring做的一些事情,按照你的想法实现一遍,写一个容器,程序执行时加载容器,自己定义的注解要处理的业务逻辑也放到容器里,通过反射探测自己定义的注解,然后通过动态代理执行自定义注解的业务逻辑,然后程序结束。其实完全没必要,有spring这个巨人在,站在他的肩膀上,能看到更远,何必自己再重复制程轮子呢,不过有兴趣了解一下这个过程,还是很有必要的,知其然,再知其所以然,可以更好利用spring。

白小衣
白小衣
谢谢 谢了这么多:)
0
练打字的
练打字的

spring其实就是个动静态代理的框架,解析到有注解时在代理你的目标方法时会有前置动作;

0
sasasasas
sasasasas

写一个类或方法,在程序启动时,扫描项目中加了注解的类或方法或字段

0
kakai
kakai

osc开源项目中就有类扫描工具类的实现。要把自定义的注解赋予实际功能,就必须能获取到使用了注解的类的Class。

可参看我的事件领域模型框架的开源项目

0
star1024_cn
star1024_cn

这里有一个自定义编写注解的例子:
https://www.jianshu.com/p/7c2948f64b1c

0
S海风S
S海风S

照着网上用注解+AOP写一个自动打印函数参数的功能就全

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部