Solon2 常用註解之 @ProxyComponent 用法說明

帶刺的坐椅發表於2023-04-19

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

相關文章