Spring入門(3)BeanとDIの依存性注入

一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月更新チャレンジ」に参加して15日目です。クリックしてイベントの詳細をご覧ください

Beanの共通属性構成

id

Beanの一意の識別子、同じSpringコンテナでの重複は許可されていません

クラス

フルクラス名。オブジェクトを反射的に作成するために使用されます

範囲

スコープには、シングルトンとプロトタイプの2つの主要な値があります(デフォルトはシングルトンです)

シングルトンに設定すると、コンテナ内のBeanオブジェクトは1つだけになります。オブジェクトaddressは、デフォルトのコンテナが作成されるときに作成されます。

プロトタイプに設定すると、コンテナ内に複数のBeanオブジェクトが存在します。getBeanメソッドを呼び出して取得するたびに、新しいオブジェクトが作成されます。

Student stu = studentDao.getStudentById(30);
Student stu2 = studentDao.getStudentById(30);
如果配置文件中
    <bean class="com.sangeng.dao.impl.StudentDaoImpl" id="studentDao" scope="prototype">
    prototype里面stu和stu2地址不一样,是不同的对象
    <bean class="com.sangeng.dao.impl.StudentDaoImpl" id="studentDao" scope="singleton">
    singleton里面stu和stu2地址一样,调用的是同一个对象  
复制代码

DI依存性注入

DIは、IOCを表現する別の方法です。つまり、コンポーネントは、事前定義された方法(setterメソッドなど)でコンテナーからのリソースインジェクションを受け入れます。IOCに比べて、この声明はより直接的です。

したがって、結論は次のとおりです。IOCは制御の反転のアイデアであり、DIはIOCの具体的な実現です。

元の方法:

//创建容器
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
 //获取对象
        Student stu = (Student) app.getBean("student");
//通过set方法
        stu.setId(3);
//也可以通过构造器
 Student stu2  = new Student("东南枝",20,19);
复制代码

セットメソッド注入

プロパティを挿入するBeanタグで構成します。前提は、クラスが提供された属性に対応するsetメソッドを持っていることです。

public class Student {

    private String name;
    private int id;
    private int age;

    private Dog dog;
复制代码

setメソッドを構成してから、構成ファイルxmlでプロパティを構成します

 <bean class="com.domain.Dog" id="dog">
       <property name="name" value="小白"></property>
       <property name="age" value="6"></property>
   </bean>
   <bean class="com.domain.Student" id="student" >
       <!--
           name属性用来指定要设置哪个属性
           value属性用来设置要设置的值
           ref属性用来给引用类型的属性设置值,可以写上Spring容器中bean的id
       -->
       <property name="name" value="东南枝"></property>
       <property name="age" value="20"></property>
       <property name="id" value="1"></property>
       <property name="dog" ref="dog"></property>
   </bean>
复制代码

知らせ

ref属性が誤ってvalue属性として書き込まれた場合、例外がスロー
されます。原因:java.lang.IllegalStateException:タイプ'java.lang.String'の値を必要なタイプ'com.atguigu.iocに変換できません。 component.HappyMachine'for property' happyMachine':一致するエディターまたは変換戦略が見つからない
ということは、String型を目的のHappyMachine型に変換できないことを意味します.value
プロパティを使用する場合、Springはこのプロパティのみを通常の文字列と見なします、およびこのプロパティは考慮されません。これはBeanのIDであり、それに基づいて値を割り当てるBeanは見つかりません。

おすすめ

転載: juejin.im/post/7086688634883014669