前沿热点:Solon2 常用注解之 @ProxyComponent 用法说明

2023-04-19 08:21:34 来源:博客园


【资料图】

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

普通组件代理组件(即 @ProxyComponent 注解的类)。代理的细节可以看下《动态代理的本质》 。

之所以需要代理,是为了能拦截函数;之所以需要拦截函数,是为了让函数上的注解生效。也算是 AOP 的基础。(如果没有拦截需求,改用 @Component)

如何使用 @ProxyComponent 注解?

1、从替代的角度、或语义的角度使用

原来使用 @Service、@Dao、@Repository这三个注解的,或者有这三种语义的类,都用 “@ProxyComponent” 注解。这些类经常会用到事务、或者缓存注解,就会需要函数拦截。使用示例:

@ProxyComponentpublic class UserService{    //...}@ProxyComponentpublic class UserDao{    //...}@ProxyComponentpublic class UserRepository{    //...}

从团队执行规范的管理角度,这个方式比较好,简单:语义对上,就用。

2、从技术的角度使用

如果一个类的函数上,使用了“用于拦截的注解”,则使用 “@ProxyComponent” ;如果没有,则使用 “@Component”。比如:

//这个类,虽然也叫 Service,但是函数没有使用“用于拦截的注解”就使用普通组件注解即可。@Componentpublic class ToolService{    public bool isEmpty(String str){        return str=null || str.length()==0;    }}//这个类,使用了“用于拦截的注解”,需要使用 "@ProxyComponent"(在函数上加注解,基本上都是拦截目的)@ProxyComponentpublic class UserService{    @Tran    public void addUser(UserDo user){        //...    }}

从高性能与克制角度,这个方式好。但团队的话,因人员素质差异,可能不好把控细节。

3、补充

为什么 “@Controller、@Remoting” 不是动态代理类,也支持函数拦截?因为它们的 Method 被提取并包装成了 MethodWrap。而,所有的函数拦截最终都是由 MethodWrap 执行。

标签:

Copyright ©  2015-2022 东方公益网版权所有  备案号:沪ICP备2020036824号-8   联系邮箱:562 66 29@qq.com