2017-12-08 12 views
-1

これはあまりにも質問のnoobではないことを願って、私はまだ春にはかなり新しいです。 Beanクラスに静的メソッドを含めることはできますか?静的メソッドがグローバルで、アプリケーション全体に1つのインスタンスがあり、共有するスレッドがあるが、Beanがそのように定義されていない可能性があるため、最初の考えはnoです。Spring Beanクラスに静的メソッドを含めることはできますか?

この質問を検索しましたが、明確な回答が見つかりませんでした。

+1

もちろん、クラス**に静的メソッドを含めることができます。より良い質問は静的メソッドを含んでいなければなりません。静的メソッドはグローバルであり、アプリケーション全体(つまりシングルトン)ごとに1つのインスタンスが存在します(注意してください)。そのため、静的メソッドがスレッドセーフであることを確認する必要があります。 –

答えて

1

はい、

スプリングビーンには静的メソッドもあります。

@Component 
public class Boo { 

    private static Foo foo; 

    @Autowired 
    public Boo(Foo foo) { 
     Boo.foo = foo; 
    } 

    public static void randomMethod() { 
     foo.doStuff(); 
    } 

    public static int getThree(){ 
     return 3; 
    } 
} 

@Autowiredコンストラクタを使用します。また、このようにそれを行うことがあります。staticフィールドへのハンドオーバー値に@PostConstruct使用

をここでの考え方を引き渡すことですBeanをSpringで構成した後、Beanを静的フィールドに変換します。

@Component 
public class Boo { 

    private static Foo foo; 
    @Autowired 
    private Foo tFoo; 

    @PostConstruct 
    public void init() { 
     Boo.foo = tFoo; 
    } 

    public static void randomMethod() { 
     foo.doStuff(); 
    } 
} 

ソース:@Autowired and static method

0

はそれを収容することができます。

@Service 
public class TestService { 

    @Autowired 
    private TestDao testDao; 

    public static void test(){ 
     System.out.println("test"); 
    } 
} 


@RestController 
@RequestMapping("/api/") 
public class TestController { 

    @Autowired 
    private TestService testService; 

    @PostMapping("test") 
    public String test(){ 
     BrandTopNumService.test(); 
     return "ok"; 
    } 
} 
関連する問題