[Spring] Spring - DI


Spring
Springは、Javaエンタープライズ・テクノロジーがエンタープライズ・リクエストを処理するサーバ環境のために構築されています.したがって、テクノロジーを理解するには、環境を理解し、理解し始めなければなりません.
ある程度の学習を経て,基本的にSOLIDのルールに従うため,特定の形態が出現し,従う基本概念によって発展した.設計パターンやSOLIDなどのルールを知る必要がある.
今日のテーマはDIです.DIを理解するためにはスプリングを理解する必要があり,その前にスプリングの代表概念IoCを理解する必要があり,動作方式の単音調と呼ぶことができる.
IoC
IoC制御反転
通常の制御プロセスでは、オブジェクト内の他の定義済みオブジェクトが作成され、呼び出され、これらのオブジェクトのプロセスに従います.定義されたクラスをオブジェクトに理解して作成します.しかし,IoCによれば,オブジェクトはこれらの確定したオブジェクトを生成せず,事実上確定しない.制御は対象本人が主導するのではなく、他の過程に任せるという意味だ.
このプロシージャは、実行時にユーザーによって決定されます.このため、クラス内でnewによって指定されたオブジェクトを作成する方法で、パラメータをオブジェクト作成者に渡し、実行時にユーザーによって指定できます.
依存コード
public class UserDao {
    private ConnectionMaker connectionMaker;
    public UserDao() {
        connectionMaker = new myConnection();
    }
    public void add(User user) throws ClassNotFoundException, SQLException {
        Connection c = connectionMaker.makeConnection();
    }
}
IoCコード
public class UserDao {
    private ConnectionMaker connectionMaker;
    public UserDao(ConnectionMaker connectionMaker) {
        this.connectionMaker = connectionMaker;
    }
}
public static void main( String[] args ) throws ClassNotFoundException, SQLException 
    {
    	ConnectionMaker connectionMaker = new myConnection();
        UserDao dao = new UserDao(connectionMaker);
    }
これらの指定したクラスに基づいてクラスを変更する場合は、メンテナンスと新しい機能を変更できます.
スプリングIoC
スプリングIoC用語について説明しましょう.
  • アイドル
    スプリングはIoC方式で管理されるオブジェクトです.すべてのオブジェクトが空ではないことに注意してください.
  • 空工場
    スプリングを担当するIoCのコアコンテナです.空ファイルの登録、生成、照会など、空ファイルを管理する機能を担当します.これは単純に貧を管理する観点から用いられる用語である.
  • アプリケーションコンテキスト
    空の工場にスプリングの付加機能を追加すれば、スプリングの機能に焦点を当てることができます.BeanFactoryの継承
  • 上のUserDaoのようなオブジェクトは空と見なすことができ、管理するmainは現在空の工場です.スプリングでは、添付ファイルとして表示して管理できます.オブジェクトを含む設定情報として表すことができます.main管理用のファクトリクラスが作成されていますが、空のファクトリと呼ばれる場合は@Configureで通知します.
    public static void main(String[] args) {
    	ApplicationContext context = new AnnotationConfigApplicationContext([팩토리 명].class);
        UserDao dao = context.getBean("[팩토리 안 빈 이름]", [빈 클래스명].class)
    mainは上のコードのように呼び出すことができます.
    モノトーン
    スプリングはモノトーンに戻ります.簡単に言えば、モノトーンとは、複数のオブジェクトを作成するのではなく、動作中に1つ以上のオブジェクトを共有することを意味する.初めて言及した大規模なリクエストが存在する環境なので、newでリクエストごとに新しいオブジェクトを作成することはできません.
    上記のコードから見ると、通常newによって生成されたオブジェクトはgetbeanによってロードされたオブジェクトに変換される.これによりnewとは異なるモノトーンオブジェクトが生成されます.
    同じクラスのオブジェクトをnewで作成すると、両方は同じ値を持ちますが、同じオブジェクトではありません.ただし、単一の色調は同じオブジェクトで、共有されます.
    Javaにおける単音モードにはprivate作成者や単音を保障するモードの開発など多くの制約要因がある.スプリングは簡単で使いやすい.
    ただし、メモリをモノトーンで共有するため、インスタンス変数の設計を考慮する必要があります.
    DI (Dependency Injection)
    DIを知る前に、依存関係を知る
    public UserDao() {
            connectionMaker = new myConnection();
    }
    上のコードでは、UserDaoがmyConnectionを直接呼び出します.myConnectionコンテンツの変更と追加により、UserDaoが影響を受ける可能性があります.しかしmyConnectionはUserDaoがどうなるかは気にしない.これをUserDaoはmyConnectionに依存し,両者は依存関係である.
    インタフェースを作成し、コンストラクション関数パラメータを使用してmyConnectionを追加するように変更します.これにより、ユーザーデータはインタフェースにのみ依存し、myConnectionが変更されても依存性が弱まり、問題が発生しません.
    前述したように、実行時に依存関係を確立するmyConnectionなどのオブジェクトを依存オブジェクトと呼ぶ.
    再説明DIとは、実行時に特定の依存オブジェクトと、それを使用するホストオブジェクト(クライアント)とを接続する動作である.
    DI条件
  • クラスモデルまたはコードは、実行時点の依存関係を表示しません.そのためには、インタフェースに依存する必要があります.
  • 運転時点の依存関係は、容器や工場などの第三者の存在によって決定される.
  • 依存関係は、使用するオブジェクトの説明を外部から提供することによって確立される.
  • DL (Dependency Lookup)
    DIと似ているが,依存オブジェクトを能動的に検索できるためDLと呼ぶ.依存関係を特定し、オブジェクトを作成するタスクはIoCとして外部コンテナに渡されますが、インポート時にメソッドや作成者によって注入されるのではなく、自分でコンテナを要求する方法です.
    コンテナがデータファクトリであると仮定
    public UserDao(){
    	DaoFactory daoFactory = new DaoFactory();
        this.connectionMaker = daoFactory.connectionMaker();
    }
    このように自分の容器に要求すると,myConnectionへの依存関係はなく,インタフェースへの依存のみが生じる.
    これはDIよりも気まずいように見えますが、検索対象にはスプリングの空を必要としないという長所があります.
    UserDaoは空である必要はなく、ConnectionMakerが空であれば大丈夫です.
    長所
    この技術を使用する際にどのような改善が重要か.
    簡単に言えば,オブジェクト向けの設計やプログラミングの原則に従うと,得られる利点はそのまま現れる.△これは余分な勉強が必要です.
  • 依存関係はインタフェース上にのみ存在する実装がどのようなものであるかは関係ない.すなわち、オブジェクトのメンテナンス、拡張が非常に自由である
  • インタフェースのフレームワークを調整すれば、何でも適用できます.