springboot取得ツール類bean過程詳細


今回の実践経験のきっかけは、開発において、ツールクラスでプロファイルの変数値を使いたいからです。通常は@value注解を使っていますが、これはspringで管理されているbean総取得しかできません。以前は、なぜ以前の開発者がSpringUtil類に@Componentの注釈を入れたのかと疑問に思っていましたが、今日またこのような状況に遭遇しました。その原因は完全に分かりました。

@Component
public class SpringUtil implements EnvironmentAware {
  private static Environment env;
  public static String getProperty(String key){
    return env.getProperty(key);
  }
  @Override
  public void setEnvironment(Environment environment) {
    injectEnvironment(env); //   spring                ,            ,              
  }
  public static void injectEnvironment(Environment env){
    SpringUtil.env = env; //               
  }
}
この原理は簡単です。例の方法で静的方法を呼び出すので、オブジェクトを生成し、多くのものではなくツールタイプのオブジェクトを生産しました。これはjavaで、springです。したがって、@Serviceの注釈も一例(これは方法が天然並列であるべきで、毎回の呼び出し方法によって、自分のデータスタックが生成される)であり、このspringではオブジェクトの使用が適切であり、作成対象のオーバーヘッドを無視することができる。
springを学んで、私達はすべてspringの1つの重要な機能が対象の管理ですと知っています。重要な問題は、私たちが欲しいビーンをどうやって獲得するかです。spirngには静的なタイプがありますか?名前で直接対象を取ります。
すみません、これはspringの正確な開け方ではありません。静的な種類を使うのはなんとストレートですが、springはこのように実現していません。通常のやり方も同じです。spirngを通じてAppplicationContextの対象を注入します。これはbean容器です。そして、私たちが獲得したい種類を獲得できます。とても謙遜して、あなたも自分でnew一つのAppliationContectの対象を作れません。これは運行環境を維持する中でただ一つのAppplication Contectの対象かもしれません。
単例は簡潔で美しいです。なぜ単独の例を使うかというと、静的なタイプを使わないかというと、2つの理由があると思います。
1.一例の作成と廃棄は一回で、使わない時に資源を節約できます。
2.私たちが継承するクラスの多くは、例示的な方法および例示的な変数であり(特に、例示的な方法および変数としては、ほとんどのクラスが実装され、複数のオブジェクトがあり得る)、継承される場合は、例示的な方法およびインスタンス変数であり、これはオブジェクト指向プログラミングスタイルの単一の例での影響といえる。一例の欠点は、オブジェクトを生成するための出費かもしれません。今はそれほどのものではありません。
対象は一般的に種類よりふくよかです。えっと、これは経験です。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。