Solon2 常用注解之 @ProxyComponent 用法说明
在 Solon 提倡“克制”的原则下,托管组件分为:
- 普通组件
- 代理组件(即 @ProxyComponent 注解的类)。代理的细节可以看下《动态代理的本质》 。
之所以需要代理,是为了能拦截函数;之所以需要拦截函数,是为了让函数上的注解生效。也算是 AOP 的基础。(如果没有拦截需求,改用 @Component)
如何使用 @ProxyComponent 注解?
1、从替代的角度、或语义的角度使用
原来使用 @Service、@Dao、@Repository 这三个注解的,或者有这三种语义的类,都用 “@ProxyComponent” 注解。这些类经常会用到事务、或者缓存注解,就会需要函数拦截。使用示例:
@ProxyComponent
public class UserService{
//...
}
@ProxyComponent
public class UserDao{
//...
}
@ProxyComponent
public class UserRepository{
//...
}
从团队执行规范的管理角度,这个方式比较好,简单:语义对上,就用。
2、从技术的角度使用
如果一个类的函数上,使用了“用于拦截的注解”,则使用 “@ProxyComponent” ;如果没有,则使用 “@Component”。比如:
//这个类,虽然也叫 Service,但是函数没有使用“用于拦截的注解”就使用普通组件注解即可。
@Component
public class ToolService{
public bool isEmpty(String str){
return str=null || str.length()==0;
}
}
//这个类,使用了“用于拦截的注解”,需要使用 "@ProxyComponent"(在函数上加注解,基本上都是拦截目的)
@ProxyComponent
public class UserService{
@Tran
public void addUser(UserDo user){
//...
}
}
从高性能与克制角度,这个方式好。但团队的话,因人员素质差异,可能不好把控细节。
3、补充
为什么 “@Controller、@Remoting” 不是动态代理类,也支持函数拦截?因为它们的 Method 被提取并包装成了 MethodWrap。而,所有的函数拦截最终都是由 MethodWrap 执行。
Solon2 常用注解之 @ProxyComponent 用法说明的更多相关文章
- Spring系列之Spring常用注解总结
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...
- SpringMVC常用注解實例詳解3:@ResponseBody
我的開發環境框架: springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...
- SpringMVC常用注解實例詳解2:@ModelAttribute
我的開發環境框架: springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...
- Spring常用注解介绍【经典总结】
Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式. Spring注解方式减少了配置文件内容 ...
- 一 : springmvc常用注解
springmvc常用注解详解1.@Controller在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层 ...
- Spring常用注解总结
转载自:https://www.cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点 ...
- Spring Ioc 常用注解
在开发中spring ioc的配置方式有多种方式,常用的一般都是byName.byType .以及其自动装配可以查看http://www.cnblogs.com/gubai/p/9140840.htm ...
- Spring注解 系列之Spring常用注解总结
参考:Spring系列之Spring常用注解总结 (1) Resource 默认是byName的方式进行bean配置,@AutoWired默认是按照byType的方式进行装配bean的:(2)Comp ...
- 转:springmvc常用注解标签详解
Spring5:@Autowired注解.@Resource注解和@Service注解 - IT·达人 - 博客园--这篇顺序渐进,讲得超级好--此人博客很不错http://www.cnblogs.c ...
- swagger2常用注解说明
说明: 1.这里使用的版本:springfox-swagger2(2.4)springfox-swagger-ui (2.4) 2.这里是说明常用注解的含义和基本用法(也就是说已经对swagger进行 ...
随机推荐
- nodejs批量重命名
const fs = require("fs"); // directory path let config = { affix: null, src: null, }; ...
- Java包机制与文档注释
Java包机制与文档注释 包机制 为了更好地组织类,java提供包机制,用于区分类名的命名空间 包语句的语法: package pkg1.pkg2.pkg3...; // 必须在文件第一行 一般用公司 ...
- html页面间传递参数
$.query.get("id") jquery.params.js代码 /** * jQuery.query - Query String Modification and Cr ...
- 服务器安装node
卸载步骤[未安装请忽略] 1.卸载npm sudo npm uninstall npm -g 2.卸载node yum remove nodejs npm -y 安装步骤 1.下载 wget http ...
- MySql 入门——日期计算
MySQL自带的日期函数TIMESTAMPDIFF计算两个日期相差的秒数.分钟数.小时数.天数.周数.季度数.月数.年数,当前日期增加或者减少一天.一周等等 SELECT TIMESTAMPDIFF( ...
- mybatis-plus自动填充踩坑
学习使用mybatis-plus的自动填充功能,对create_time和update_time做一个自动填充,期间碰到了一些问题,记录一下问题和相关代码 在实体类字段上增加注解@TableField ...
- ios装包
一.下载爱思助手 二.找到本机设备 注:如果未弹出允许.拒绝调试选项可尝试换根数据线解决 三.将对应包体文件拖入本机设备
- 2.面向对象基础-01Java类和对象
写在前面: (1)编程语言的发展(人越来越容易理解): 机器语言 汇编语言 高级语言-面向过程 高级语言-面向对象 (2)面向对象的特点: 封装性 继承性 多态性 01Java类和对象 对象:属性(静 ...
- CentOS7更改阿里源
阿里云yum源:1)备份当前yum源防止出现意外还可以还原回来cd /etc/yum.repos.d/cp /CentOS-Base.repo /CentOS-Base-repo.bak2)使用wge ...
- maven 多模块项目的测试覆盖率分析 - jacoco 聚合分析
前言 对于大多数 maven 多模块化工程,可以使用 Jacoco 这款工具,关于 Jacoco 这款工具,ChatGPT 对它的描述是这样的: JaCoCo(Java Code Coverage)是 ...