Spring 中, Service 调用 Service 有什么好的方式吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
depress
V2EX    Java

Spring 中, Service 调用 Service 有什么好的方式吗?

  •  1
     
  •   depress 2015-12-01 10:09:35 +08:00 9357 次点击
    这是一个创建于 3669 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前是把一些公共的业务方法放在一个公共 Service 里了,譬如某些查询等,然后其他业务 Service 调用这个公共 Service 的方法,但是调用的话,除了调用前获取一下上下文还有什么好的办法吗,获取上下文的速度好慢。
    19 条回复    2015-12-15 09:10:40 +08:00
    saximoer
        1
    saximoer  
       2015-12-01 10:22:01 +08:00
    IOC 啊
    直接注入这个 SERVICE 对象?
    depress
        2
    depress  
    OP
       2015-12-01 10:51:26 +08:00
    @saximoer 包下所有都注入了,调用的时候还是提示空指针,目前是用了获取 ApplicationContext 的方法才能获取到,按道理注入后应该是可以直接调用啊,为什么我调用就找不到那个 bean...
    zts1993
        3
    zts1993  
       2015-12-01 11:00:21 +08:00
    。。。。调用者本身也得是 Spring 构造出来的。
    br00k
        4
    br00k  
       2015-12-01 11:17:09 +08:00
    直接注入就可以了吧。楼主应该找下为啥没有注入成功。
    id4alex
        5
    id4alex  
       2015-12-01 11:56:11 +08:00
    spring 只能注入 spring 容器里面的对象。。。
    zonghua
        6
    zonghua  
       2015-12-01 12:06:27 +08:00 via iPhone
    Spring 是神一般的框架,现在写软件就像积木一样组装。
    caixiexin
        7
    caixiexin  
       2015-12-01 12:10:52 +08:00 via Android
    直接注入,除非你们团队不让同级 service 互相调用
    Infernalzero
        8
    Infernalzero  
       2015-12-01 12:22:59 +08:00
    你这个公共的 service 没注入吧?如果也加了 @Component 或者 @Service 的话是可以直接 autowire 的,既然你能从 ApplicationContext 里获取到那我猜应该是该类没加需要扫描的注解了,要么就是扫描的配置有问题
    qinxi
        9
    qinxi  
       2015-12-01 13:20:21 +08:00
    你需要 dubbo 公共方法暴露接口供其他服务调用!
    gangsta
        10
    gangsta  
       2015-12-01 13:39:23 +08:00
    这不就是 ZooKeeper / dubbo 的应用场景么?
    north521
        11
    north521  
       2015-12-01 15:37:08 +08:00
    @gangsta
    @qinxi
    他说的是传统的 controller service dao 那里的 service 吧
    不是那种服务
    depress
        12
    depress  
    OP
       2015-12-01 15:39:27 +08:00
    @saximoer @zts1993 @br00k @id4alex @caixiexin @Infernalzero @qinxi @zonghua @gangsta
    谢谢各位,注入搞定了,目前有个新问题,如果我想把 service 当成静态变量用,譬如:
    @Autowired
    private static XxxService xxxservice
    这样是不是无法依赖注入?我这样用又报空指针了。
    wzdxt
        13
    wzdxt  
       2015-12-01 16:09:32 +08:00
    是的,你不应该用静态。
    如果你只是想每次都用同一个对象,避免反复创建对象,只需要在类上添加注解 @Scope("singleton")就行了。
    你可以打印对象的 id 测试每次使用的是否是同一个
    Infernalzero
        14
    Infernalzero  
       2015-12-01 16:45:41 +08:00
    @depress
    为何要改成静态的,难道你是打算在 main 函数里调用?
    raysmond
        15
    raysmond  
       2015-12-01 16:49:23 +08:00
    DI 机制可是 Spring 的灵魂之一,当然是注入了
    qinxi
        16
    qinxi  
       2015-12-01 17:01:07 +08:00
    @depress 为什么要非用静态变量? 难道你觉得每个类里面写上 resource/inject 麻烦吗?
    caixiexin
        17
    caixiexin  
       2015-12-01 17:33:45 +08:00 via Android
    静态是单例, spring 注入也可以是单例,为什么要静态呢
    fwrq41251
        18
    fwrq41251  
       2015-12-01 17:40:27 +08:00
    @depress
    可以当成静态的成员来用的,但是你需要一个辅助的 Bean 来做这件事情,在那个 Bean 里注入你需要的 service ,再把这个 service 赋值给你的静态成员
    depress
        19
    depress  
    OP
       2015-12-15 09:10:40 +08:00
    @wzdxt @Infernalzero @qinxi @caixiexin @fwrq41251
    再次谢谢各位,因为公共类是供大家使用的,所以变量和方法都定义成静态的了,这样可以注入后直接用,单例确实是没有明确要求的话很少用,另外因为公共类也用到了业务 service 的一些方法,所以依赖了一些业务的 service ,比如有个查询在某个业务 service 里,而公共类先调用查询方法,然后验证查询结果之类的...不过后来想了想这样互相依赖比较乱,所以改了个设计,目前是没有这问题了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5218 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 08:33 PVG 16:33 LAX 00:33 JFK 03:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86