Springソースシリーズ:依存注入-引用

3000 ワード

  • Springソースシリーズ:BenDefinitionソース解析
  • Springソースシリーズ:BeanDefinitionロード
  • Springソースシリーズ:BeanDefinitionロード(中)
  • Springソースシリーズ:BeanDefinitionロード(下)
  • 上の4つの文章の中でビーンのロードを大体分析しましたが、この過程はIoc容器の中にBenDefinitionのデータマッピングを構築することです.しかし、Beanの実用化には関与しておらず、これまでの分析でも、Beanの実用化は注入に依存していると述べている.
    依存注入について
    Springについて、最初に考えたのは二つのIocとAopです.そしてIocに関してはまた2つの制御反転と依存注入を加えることができます.逆転と依存を制御してネット上で注入して無数の大神や菜々鳥に解読されたことがあります.ここではそれらの概念を羅列しないで、直接に見ます.
    Springは使用しません
    public class UserService {
        //  new  
        UserDao userDao = new UserDaoImpl();
        public int insertUser(String userName) {
        	return userDao.insertUser(userName);
        }
    }
    
    Springを使う(注で)
    public class UserService {
        @Autowired
        private UserDao userDao;
        public int insertUser(String userName) {
        	return userDao.insertUser(userName);
        }
    }
    
    大きな変化はなさそうですが、違いはありますか?
    まず一つのクラスの中でこの二つの説明の違いを分析します.UserDao userDao;userDaoはUserDaoタイプの参照名です.変数の参照名を宣言しただけです.具体化していません.userDaoの実例化はset方式で設定できます.私たちはuserDaoのこのクラスを初期化した時、userDaoがどのスタックの中のオブジェクトアドレスを指しているのかまだ分かりません.UserDao userDao = new UserDaoImpl();これは、変数名を説明し、new UserDaoImpl()が作成したオブジェクトに直接userDaoを指します.
    Springでは注入後のオブジェクトアドレスと注入方式を使用しないオブジェクトのアドレスを見てみます.
    1、ダイレクト注入
    2、自分を覆う対象を注入する
    3、自分で手動new
    上の3つの図から明らかに分かるように、自分の手动newのオブジェクトは代理の方式を使用していないが、Springにチューブを注入する対象はすべてダイナミックエージェントによって完成されている.
    動態代理について:「猪弟拱Java」連載番外編:Java代理(中)
    まとめ:あるキャラクター(Javaの例かもしれないが、调节者)が他のキャラクター(他のJavaの例、被调节者)の协力を必要とするとき、Springを使用してビーンを管理するプログラム设计プロセスでは、通常は调节者によって被调节者の実例を作成する.ただしSpringでは、被调节者を作成する仕事は调节者によっては完成されないので、コントロール反転と呼ばれています.被調合者のインスタンスを作成する作業は、通常Spring容器によって行われ、その後に調合者を注入するので、依存注入とも呼ばれる.
    三つの問題
    今考えるべき問題は、いつ私たちの依存注入をトリガしますか?Beanの実用化は注入に依存して行わなければならないですか?Springではどのような種類で注入作業を完了しましたか?
    1、いつか私たちの依存注入をトリガします.
    ユーザは初めてビーンを容器に取り込む時に出発します.
    2、Beanの実装は注入に依存していないと完成できないですか?
    これは必要ではありません.BenDefinitionにはlazy-nitという属性があるということを知っています.この属性を制御する設定によって、Beanに対する事前実例化を完成させることができます.事前実施例としては,その依存注入は実用化の間に達成されるということである. 。 , , 。