Solon2 开发之IoC,九、自定义注解开发汇总
1、定义构建能力注解,比如@Controller
注解类:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Controller {
}
注解类能力注册:
//注册 @Controller 构建器
Solon.context().beanBuilderAdd(Controller.class, (clz, bw, anno) -> {
//内部实现,可参考项目源码
new HandlerLoader(bw).load(Solon.app());
});
应用示例:
@Controller
public class DemoController{
@Mapping("/hello")
public String hello(){
return "Hello world!";
}
}
2、定义字段或参数注入能力的注解,比如@Inject
注解类:
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Inject {
String value() default "";
boolean required() default true;
boolean autoRefreshed() default false;
}
注解类能力注册:
//注册 @Inject 注入器
Solon.context().beanInjectorAdd(Inject.class, ((fwT, anno) -> {
//内部实现,可参考项目源码
beanInject(fwT, anno.value(), anno.autoRefreshed());
}));
应用示例:
@Service
public class DemoService{
//注入字段
@Inject
UserMapper userMapper;
}
@Configuration
public class DemoConfig{
//注入到参数。只支持与:@Bean 配合
@Bean
public DataSource ds(@Inject("${db1}") HikariDataSource ds){
return ds;
}
}
3、定义函数拦截能力的注解,比如@Tran
注解类:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Tran {
TranPolicy policy() default TranPolicy.required;
TranIsolation isolation() default TranIsolation.unspecified;
boolean readOnly() default false;
}
注解类能力注册:
//内部实现,可参考项目源码
Solon.context().beanAroundAdd(Tran.class, new TranInterceptor(), 120);
应用示例:
@Service
public class DemoService{
//注入字段
@Inject
UserMapper userMapper;
@Tran
public void addUser(User user){
userMapper.add(user);
}
}
4、定义函数提取能力的注解,比如:@CloudJob
注解类:
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CloudJob {
@Alias("name")
String value() default "";
@Alias("value")
String name() default "";
String cron7x() default "";
String description() default "";
}
注解类能力注册:
//内部实现,可参考项目源码
Solon.context().beanExtractorAdd(CloudJob.class, CloudJobExtractor.instance);
应用示例:
@Component
public class JobController{
@CloudJob(name="user.stat", cron7x="0 0/1 * * * ? *")
public void userStatJob(){
//...
}
}
Solon2 开发之IoC,九、自定义注解开发汇总的更多相关文章
- Solon 开发,七、自定义注解开发汇总
Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...
- Java自定义注解开发
一.背景 最近在自己搞一个项目时,遇到可需要开发自定义注解的需求,对于没有怎么关注这些java新特性的来说,比较尴尬,索性就拿出一些时间,来进行研究下自定义注解开发的步骤以及使用方式.今天在这里记下, ...
- Java实现自定义注解开发
Java实现自定义注解开发 一直都对注解开发挺好奇的,最近终于有时间自己实践了一把,记录一下 万一后期会用到呢 哈哈哈 首先我们了解一下自定义注解的标准示例,注解类使用 @interface 关键字修 ...
- Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化
知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...
- Spring注解驱动开发之Ioc容器篇
前言:现今SpringBoot.SpringCloud技术非常火热,作为Spring之上的框架,他们大量使用到了Spring的一些底层注解.原理,比如@Conditional.@Import.@Ena ...
- Liferay7 BPM门户开发之32: 实现自定义认证登陆(定制Authentication Hook)
第一步:修改liferay-hook.xml <?xml version="1.0"?> <!DOCTYPE hook PUBLIC "-//Lifer ...
- Liferay7 BPM门户开发之11: Activiti工作流程开发的一些统一规则和实现原理(完整版)
注意:以下规则是我为了规范流程的处理过程,不是Activiti公司的官方规定. 1.流程启动需要设置启动者,在Demo程序中,“启动者变量”名统一设置为initUserId 启动时要做的: ident ...
- Java开发之@PostConstruct和@PreConstruct注解
从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct.这两个注解被用来修饰一个非静态的 ...
- Java开发之@PostConstruct和@PreDestroy注解
从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct.这两个注解被用来修饰一个非静态的 ...
- IOS开发之xib解决自定义CollectionCell问题
这几天一直在纠结一件事情,搞的我是食不能安,寝不能睡啊: 当程序员在面对一个自己解决不了的问题的时候,也许是该程序员开始成长的时候 ... 先说说,事件的起因: 之前是源于在网上下载的文档,使用xib ...
随机推荐
- 高精度加法(C语言实现)
高精度加法(C语言实现) 介绍 众所周知,整数在C和C++中以int ,long,long long三种不同大小的数据存储,数据大小最大可达2^64,但是在实际使用中,我们仍不可避免的会遇到爆long ...
- jap复制一条数据插入数据库,报:identifier of an instance of com.kxkd.shop.entity.goods.GoodsSpu was alt
因为修改了jpa实体id 可以先使用springframework的BeanUtils复制一个相同的对象 BeanUtils.copyProperties(source, target); //复制属 ...
- 解决IDEA中.properties文件中文变问号(???)的问题(已解决)
问题背景 构建SpringBoot项目时,项目结构中有一个application.properties文件.这个项目是Spring Boot一个特有的配置文件.内容如下(我写了一些日志的配置): 写到 ...
- 哈希表(hash)
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存储存位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度 ...
- 华为云WebAssembly代码静态符号执行技术实现新突破
本文分享自华为云社区<华为云WebAssembly代码静态符号执行技术实现新突破,相关论文被软件工程顶会ISSTA2023接收并荣获杰出论文奖>,作者:华为云软件分析Lab . WebAs ...
- 文心一言 VS 讯飞星火 VS chatgpt (141)-- 算法导论12.1 1题
一.用go语言,对于关键字集合(1,4,5,10,16,17,21),分别画出高度为 2.3.4.5和6的二又搜索树. 文心一言: 以下是用Go语言为给定的关键字集合(1, 4, 5, 10, 16, ...
- C#Winform使用NPOI获取word中的数据
公众号「DotNet学习交流」,分享学习DotNet的点滴. 需求 想要获取word里面的内容,如下图所示: 有一张表和一段文本,并将它们存入数据库或者Excel. 步骤 添加NPOI的库,如下图所示 ...
- Codeforces Round 883 (Div. 3)
Codeforces Round 883 (Div. 3) A. Rudolph and Cut the Rope 题意:有一颗糖果在连在绳子上,求剪短多少根绳子,他能落地 思路:只要绳子长度比钉子高 ...
- lxml模块
lxml主要用xpath.css选择器等来提取xml格式文档,html也是xml格式文档的一种. xpath方法返回列表的三种情况 返回空列表:没有找到任何元素 返回字符串列表:xpath规则匹配用了 ...
- Scrapy框架架构
ENGINE:引擎,负责各个组件的管理. SPIDERS:各个爬虫文件类.(我们一般要写的代码就是这个). SCHEDULER:调度器,ENGINE将爬虫任务分发给该组件,由该组件调度爬虫任务. DO ...