在 Solon 提倡“克制”的原則下,托管組件分為:
- 普通組件
- 代理組件(即 @ProxyComponent 注解的類)。代理的細(xì)節(jié)可以看下《動(dòng)態(tài)代理的本質(zhì)》 。
之所以需要代理,是為了能攔截函數(shù);之所以需要攔截函數(shù),是為了讓函數(shù)上的注解生效。也算是 AOP 的基礎(chǔ)。(如果沒(méi)有攔截需求,改用 @Component)
如何使用 @ProxyComponent 注解?
1、從替代的角度、或語(yǔ)義的角度使用
原來(lái)使用 @Service、@Dao、@Repository 這三個(gè)注解的,或者有這三種語(yǔ)義的類,都用 “@ProxyComponent” 注解。這些類經(jīng)常會(huì)用到事務(wù)、或者緩存注解,就會(huì)需要函數(shù)攔截。使用示例:
@ProxyComponent
public class UserService{
//...
}
@ProxyComponent
public class UserDao{
//...
}
@ProxyComponent
public class UserRepository{
//...
}
從團(tuán)隊(duì)執(zhí)行規(guī)范的管理角度,這個(gè)方式比較好,簡(jiǎn)單:語(yǔ)義對(duì)上,就用。
2、從技術(shù)的角度使用
如果一個(gè)類的函數(shù)上,使用了“用于攔截的注解”,則使用 “@ProxyComponent” ;如果沒(méi)有,則使用 “@Component”。比如:
//這個(gè)類,雖然也叫 Service,但是函數(shù)沒(méi)有使用“用于攔截的注解”就使用普通組件注解即可。
@Component
public class ToolService{
public bool isEmpty(String str){
return str=null || str.length()==0;
}
}
//這個(gè)類,使用了“用于攔截的注解”,需要使用 "@ProxyComponent"(在函數(shù)上加注解,基本上都是攔截目的)
@ProxyComponent
public class UserService{
@Tran
public void addUser(UserDo user){
//...
}
}
從高性能與克制角度,這個(gè)方式好。但團(tuán)隊(duì)的話,因人員素質(zhì)差異,可能不好把控細(xì)節(jié)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-418125.html
3、補(bǔ)充
為什么 “@Controller、@Remoting” 不是動(dòng)態(tài)代理類,也支持函數(shù)攔截?因?yàn)樗鼈兊?Method 被提取并包裝成了 MethodWrap。而,所有的函數(shù)攔截最終都是由 MethodWrap 執(zhí)行。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-418125.html
到了這里,關(guān)于Solon2 常用注解之 @ProxyComponent 用法說(shuō)明的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!