首页 > 其他分享 >Solon2 开发之IoC,九、自定义注解开发汇总

Solon2 开发之IoC,九、自定义注解开发汇总

时间:2023-02-13 22:14:55浏览次数:38  
标签:自定义 default class Inject Solon2 注解 ElementType IoC public

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(){
        //...
    }
}

标签:自定义,default,class,Inject,Solon2,注解,ElementType,IoC,public
From: https://www.cnblogs.com/noear/p/17118001.html

相关文章

  • Mybatis09 - 自定义映射 resultMap
    字段名与属性名不一致实体类publicclassEmp{privateIntegerempId;privateStringempName;privateIntegerage;privateStringgender;......
  • 001.SpringIoc初体验
    1.创建entity(Apple、Child)packagecom.imooc.spring.ioc.entity;publicclassApple{privateStringtitle;privateStringcolor;privateStringori......
  • vscode自定义主题配色
    setting.json{"workbench.colorTheme":"SolarizedLight","window.zoomLevel":1,//目自定义的颜色"editor.tokenColorCustomizations":{......
  • 如何理解Spring框架中的ioc?
    目录如何理解Spring框架中的ioc?DI耦合和内聚如何理解Spring框架中的ioc?ioc,InversionofControl(控制反转),是Spring中的一种设计思想而非技术。我们可以从4个方面理解io......
  • 自定义注解记录日志
    1.自定义注解2.切面类3.具体方法3.具体方法二4.具体方法  5.具体方法三6.具体方法7 ......
  • coding持续集成构建环境自定义node版本
    解决方案只需要在构建计划的编写过程中增加一个如下的stage,具体nodejs版本下载地址可参考https://nodejs.org/en/download/releases/这里。stage('toggleNode.......
  • 【Spring IOC】Spring IOC 容器源码解析文章导读
    1 前言Spring老生常谈,JavaWeb程序员的必备,程序员不看源码不懂源码,路走不长,所以耐心看,边看操作。本文是SpringIOC源码分析系列文章的导读文章,将会着重介绍Spring的......
  • go-rod 自定义启动
       u:=launcher.New().Headless(false).//Devtools(true).Bin("E:\\Chrome-bin\\chrome.exe").MustLaunch()browser:=rod.Ne......
  • MQ的定时任务改装,实现自定义定时:MQ+redis
    packagecom.*.server.live.listener;importcom.*.common.core.entity.constant.LiveConstant;importcom.*.common.redis.service.RedisService;importcom.*.serve......
  • 07 自定义分页器
    自定义分页器推导current_page=request.GET.get("page",1)#获取用户访问的页码,没有则默认展示第一页try:#由于后端接收到的前端数据是字符串类型所以做类型转换......