在 Solon 提倡“克制”的原则下,托管组件分为:

之所以需要代理,是为了能拦截函数;之所以需要拦截函数,是为了让函数上的注解生效。也算是 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 用法说明的更多相关文章

  1. Spring系列之Spring常用注解总结

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...

  2. SpringMVC常用注解實例詳解3:@ResponseBody

    我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...

  3. SpringMVC常用注解實例詳解2:@ModelAttribute

    我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...

  4. Spring常用注解介绍【经典总结】

    Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式. Spring注解方式减少了配置文件内容 ...

  5. 一 : springmvc常用注解

    springmvc常用注解详解1.@Controller在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层 ...

  6. Spring常用注解总结

    转载自:https://www.cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点 ...

  7. Spring Ioc 常用注解

    在开发中spring ioc的配置方式有多种方式,常用的一般都是byName.byType .以及其自动装配可以查看http://www.cnblogs.com/gubai/p/9140840.htm ...

  8. Spring注解 系列之Spring常用注解总结

    参考:Spring系列之Spring常用注解总结 (1) Resource 默认是byName的方式进行bean配置,@AutoWired默认是按照byType的方式进行装配bean的:(2)Comp ...

  9. 转:springmvc常用注解标签详解

    Spring5:@Autowired注解.@Resource注解和@Service注解 - IT·达人 - 博客园--这篇顺序渐进,讲得超级好--此人博客很不错http://www.cnblogs.c ...

  10. swagger2常用注解说明

    说明: 1.这里使用的版本:springfox-swagger2(2.4)springfox-swagger-ui (2.4) 2.这里是说明常用注解的含义和基本用法(也就是说已经对swagger进行 ...

随机推荐

  1. nodejs批量重命名

    const fs = require("fs"); // directory path let config = {   affix: null,   src: null, }; ...

  2. 游戏内存优化之使用16位纹理/NPOT

    转自:https://blog.csdn.net/oqqQuZi1234567/article/details/41749599 图片文件大小和纹理内存占用是两码事.假设他们是帐篷.图片文件就相当于帐 ...

  3. flink常用命令

    1.查看flink任务 /var/lib/hadoop-hdfs/flink/bin/flink  list 2.停止flink任务 /var/lib/hadoop-hdfs/flink/bin/fl ...

  4. 更改windows powershell默认路径

    查看配置文件位置 $profile 修改配置文件 code $profile 加上 Set-Location C:\Users\zzy81\Desktop

  5. SQL Network Interfaces, error: 50 - 发生了 Local Database Runtime 错误。无法创建自动实例

    1. sqllocaldb delete MSSQLLocalDB 2. sqllocaldb create

  6. 京东-Docker

    关于 Docker 版本的<使用与更新>教程修订日期:2021年 3 月 14 日ㅤ 一.基础使用教程1. 进入与退出容器:docker exec -it jd /bin/bash注意:e ...

  7. 使用request对象实现注册示例,请求方式的编码问题

    get提交方式: method="get"和地址栏请求方式默认都属于get提交方式 get方式在地址栏显示请求信息﹐(但是地址栏能够容纳的信息有限,4-5KB;如果请求数据存在大文 ...

  8. 调用webservice校时

    先调用网络获取网络时间 namespace Utility{    /// <summary>     /// 网络时间     /// </summary>     publ ...

  9. api加密与校验

    一.函数代码 /** * 校验 * @data (请求的数组) * @salt (加密盐) * */ private function verify(array $data, $salt){ $sig ...

  10. switch case return return 返回不了值的原因

    我在页面写了一个ajax ,但是控制器 是 用switch case break 控制的控制器  , 我想 在case login 方法里  直接 return  , 但是不好使 始终是 null , ...