• Solon2 常用注解之 @ProxyComponent 用法说明


    在 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 执行。

  • 相关阅读:
    合并排序的数组
    css 绘制 上,下,右,左箭头
    Google Play 索引表
    c++语言--面试题
    真正“搞”懂HTTP协议03之时间穿梭
    永州植物细胞实验室建设布局方案
    [请回答C++] C++11&智能指针&引用计数&weak_ptr
    03【设计模式的七大原则】
    【PAT甲级】1131 Subway Map
    使用matplotlib绘制定制化饼图(图例比例标签支持中文等)
  • 原文地址:https://www.cnblogs.com/noear/p/17331940.html