目次
Bean依存性注入の開始
①UserServiceを作成します。UserDaoのsave()メソッドがUserService内で呼び出されています
public class UserServiceImpl implements UserService {
@Override
public void save() {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.save();
}
}
②UserServiceImplの作成権をSpringに付与する
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl"/>
③操作用のSpringコンテナからUserServiceを取得します
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
userService.save();
1.Beanの依存性注入の概念
依存性注入:これは、SpringフレームワークのコアIOCの具体的な実装です。
プログラムを書くとき、制御の反転によってオブジェクトの作成はSpringに渡されますが、コードに依存関係を持たせることは不可能です。
IOCデカップリングは、それらの依存関係を減らすだけで、それらを排除するわけではありません。例:ビジネス層は引き続き永続層のメソッドを呼び出します。
Springを使用した後、ビジネス層と永続層の間の依存関係はSpringによって維持されます。
簡単に言えば、フレームワークが永続層オブジェクトを自分で取得するのではなく、ビジネス層に渡すのを待つことです。
これは、対応するデータ送信と関数呼び出しのために多数の機能クラスが直接結合されているようなものであり、Springの出現は、コンテナーの概念を使用してすべてのクラスをBeanに変換し、クラス間の仲介役として機能することです。管理では、内部のデータ転送は依存関係インジェクションと呼ばれます。
2.Beanの依存性注入方法
①工法
// 创建有参构造
public class UserServiceImpl implements UserService {
@Override
public void save() {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.save();
}
}
// 配置Spring容器调用有参构造时进行注入
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl"> <constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
②設定方法
//在UserServiceImpl中添加setUserDao方法
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
//配置Spring容器调用set方法进行注入
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
setメソッド:P名前空間インジェクション
P命名空间注入本质也是set方法注入,但比起上述的set方法注入更加方便,主要体现在配置文件中,如下:
首先,需要引入P命名空间:
xmlns:p="http://www.springframework.org/schema/p"
第二に、注入方法を変更する必要があります
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl" p:userDao-
ref="userDao"/>
3.Beanの依存性注入データ型
上記の操作はすべて注入された参照Beanであり、オブジェクトの参照を注入でき、一般的なデータ型、コレクションなどをコンテナーに注入できます。
注入されたデータの3つのデータ型
一般的なデータ型
参照データ型
コレクションのデータ型
参照データ型はここでは繰り返されません。前の操作はすべてUserDaoオブジェクトの参照を挿入しています。以下では、一般的なデータ型と収集データ型の挿入を示す例として、setメソッドの挿入を取り上げます。
Beanの依存性注入データ型
(1)一般的なデータ型の注入
public class UserDaoImpl implements UserDao {
private String company;
private int age;
public void setCompany(String company) {
this.company = company;
}
public void setAge(int age) {
this.age = age;
}
public void save() {
System.out.println(company+"==="+age);
System.out.println("UserDao save method running....");
}
}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="company" value="传智播客"></property>
<property name="age" value="15"></property>
</bean>
(2)コレクションデータ型の挿入(リスト)
public class UserDaoImpl implements UserDao {
private List<String> strList;
public void setStrList(List<String> strList) {
this.strList = strList;
}
public void save() {
System.out.println(strList);
System.out.println("UserDao save method running....");
}
}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="strList">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
</bean>
(3)コレクションデータ型の挿入(リスト)
public class UserDaoImpl implements UserDao {
private List<User> userList;
public void setUserList(List<User> userList) {
this.userList = userList;
}
public void save() {
System.out.println(userList);
System.out.println("UserDao save method running....");
}
}
<bean id="u1" class="com.itheima.domain.User"/>
<bean id="u2" class="com.itheima.domain.User"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="userList">
<list>
<bean class="com.itheima.domain.User"/>
<bean class="com.itheima.domain.User"/>
<ref bean="u1"/>
<ref bean="u2"/>
</list>
</property>
</bean>
(4)収集データ型の( Map<String,User> )
注入
public class UserDaoImpl implements UserDao {
private Map<String,User> userMap;
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
public void save() {
System.out.println(userMap);
System.out.println("UserDao save method running....");
}
}
<bean id="u1" class="com.itheima.domain.User"/>
<bean id="u2" class="com.itheima.domain.User"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="userMap">
<map>
<entry key="user1" value-ref="u1"/>
<entry key="user2" value-ref="u2"/>
</map>
</property>
</bean>
(5)コレクションデータ型の挿入(プロパティ)
public class UserDaoImpl implements UserDao {
private Properties properties;
public void setProperties(Properties properties) {
this.properties = properties;
}
public void save() {
System.out.println(properties);
System.out.println("UserDao save method running....");
}
}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="properties">
<props>
<prop key="p1">aaa</prop>
<prop key="p2">bbb</prop>
<prop key="p3">ccc</prop>
</props>
</property>
</bean>