2011-02-18 9 views
0

それ。そのような場合のベストプラクティスは何ですか?リクエストスコープのサービスは問題ありませんか?CGLIBプロキシ(最終クラス)

@Configuration 
public class CityFactory{ 

    @Bean(name = {"currentUserId") 
    @Scope(value = WebApplicationContext.SCOPE_REQUEST,proxyMode = ScopedProxyMode.TARGET_CLASS) 
    @Autowired 
    public Integer getUserId(HttpServletRequest request) { 
     return UserUtil.getCurrentUserId(request.getServerName()); 
    } 
} 


@RequestMapping("/demo") 
@Controller 
public class DemoController { 

    @Autowired 
    Ingeter userId; 

    @RequestMapping(value = "/hello/{name}", method = RequestMethod.GET) 
    public ModelAndView helloWorld(@PathVariable("name") String name, Model model) { 
     Map<String, Object> myModel = new HashMap<String, Object>(); 
     model.addAttribute("user", userId); 
     return new ModelAndView("v3/test", "m", model); 
    } 
} 
+1

を使用することができますか? –

+0

@Sean:これはCGLIBの働きだからです。 – skaffman

+0

@skaffmanコントローラやIDクラスのサブクラス化を理解できますが、なぜIntegerですか? –

答えて

3

あなたの最善の策は、順番に整数が含まれていUserIdと呼ばれる明示的なクラスを作成することです。これはCGLIBのプロキシ処理でよりうまくいくだけでなく、デザインを明確にします。

+1

このような提案のために、私はAtomicIntegerクラスを優先しています。これは並行パッケージですでに提供されています。ありがとう。他のアイデア? – Ozgur

0

あなたが整数をサブクラス化したいと思うなぜあなたは、サプライヤーやプロバイダ

@Configuration 
public class CityFactory{ 

    @Bean 
    @Autowired 
    public Supplier<Integer> getUserId(HttpServletRequest request) { 
     return() -> UserUtil.getCurrentUserId(request.getServerName()); 
    } 
} 
@RequestMapping("/demo") 
@Controller 
public class DemoController { 

    @Autowired 
    Supplier<Ingeter> getUserId; 
関連する問題