Open gMan1990 opened 7 years ago
在spring 直接用 @Service
注册
@qct 你是说再加上@org.springframework.stereotype.Service么
是的
@gMan1990 @qct 通过注解加载的话,应该需要配置
@qct @zylele com.alibaba.dubbo.rpc.Filter,是不是可以用这个实现类似AOP的功能,dubbo内部还有其它的么?
Filter可以实现类似AOP的功能,但是为何要用dubbo的Filter来实现AOP,完全可以用Sping原生的哦,而且Spring的AOP可以实现比Filter更丰富的功能。
@yunhaibin 但通过注解@Reference,如何向spring注册bean呢然后被AOP到呢
@qct @zylele @yunhaibin 看下1楼更新的图片
@gMan1990
@Path("userInfo")
@Component
public class UserInfoAction {
private static final Logger logger = LogManager.getLogger(UserInfoAction.class);
@Autowired
private UserInfoService userInfoService;
@yunhaibin 我说的是@Reference注解。ps:你这个Path是哪个类?
@gMan1990 Path是javax.ws.rs.Path; 我们没有用@Reference来注入,我们是用xml文件管理起来所有引用的生产服务接口,xml里面可以清晰明了看到所有提供的服务:
<dubbo:reference id="userInfoService" interface="cn.nickid.dbapi.leancloud.service.UserInfoService" />
代码里面用@Autowired来注入就行了
使用 @Reference 之后,你已经可以拿到这个bean了,在这里就可以把 @Reference理解成 @Autowired。spring已经帮你注入了远程服务代理。
但是这时候拿到的bean是代理对象,所以如果想做AOP,最好做一次包装。对包装类的包装方法做AOP。
@qct @Reference之后bean是拿到了,但spring容器内并不会设入这个类(spring.getBean是没有的),那怎么spring aop
@gMan1990 我们没有用过aop的功能,回头可以写个测试看一下……
@gMan1990 这个bean当然在spring容器里! getbean 当然可以拿到,拿到的是代理对象。你可以把所有注册的bean的名字打印出来看一下。
@qct 我就是试过了,才说的。真木有 用xml: <dubbo:reference id="必填" 是有的,比如class com.alibaba.dubbo.common.bytecode.proxy4,可以直接对该interface作spring aop,不需要关心这个proxy。
@gMan1990 如果被@transitional注解过的,@Reference是有bug的,这个你知道的吧?是不是已经屏蔽了这个
暂定解决:com.alibaba.dubbo.rpc.Filter