Springのコンストラクターインジェクション
前回の記事では、Springは、Springへのオブジェクトの作成に依存して、プログラム間の依存関係を減らすことができると述べました。
しかし、クラスにデフォルトのコンストラクターがない場合、またはコンストラクターが上書きされている場合、オブジェクトが作成されても、クラス内のメソッドを呼び出すことはできません。
このノートでは、主にSpringでのコンストラクターのパラメーター注入について説明します。最初に、元々UserServiceImplであったクラスを変換し、パラメーターを使用してコンストラクターを指定します。これにより、元のデフォルトコンストラクターが上書きされます。
public class UserServiceImpl implements IUserService {
private String name;
private Integer age;
private Date birthday;
public UserServiceImpl(String name, Integer age, Date birthday) {
this.name = name;
this.age = age;
this.birthday = birthday;
}
public void queryAll() {
System.out.println(name+","+age+","+birthday+".");
}
}
次に、bean.xmlには、次の属性を持つconstructor-argタグがあります。
- type:注入されるデータのデータ型を指定するために使用されます。データ型は、コンストラクター内の1つまたはいくつかのパラメーターの型でもあります。
- index:コンストラクター内の指定されたインデックス位置でパラメーターに注入されるデータを割り当てるために使用されます。パラメータの位置は0から始まります
- name:コンストラクターで指定された名前にパラメーターを割り当てるために使用されます
- 値:基本的なデータ型と文字列型のデータを提供するために使用されます
- ref:他のBeanタイプのデータを指定するために使用されます。上記の日付として
上記の属性を使用すると、コンストラクターの挿入に一般的に使用される名前と値を使用できます
<bean id="UserService" class="com.imis.service.impl.UserServiceImpl">
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="name" value="mike"></constructor-arg>
<constructor-arg name="birthday" ref="now"></constructor-arg>
</bean>
<bean id="now" class="java.util.Date"></bean>
public static void main(String[] args) {
//1.获取核心容器对象
ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
//2.根据id获取bean
IUserService is=ac.getBean("UserService",IUserService.class);
is.queryAll();
}
mike,18,Sun Jan 17 14:41:03 CST 2021.