1.制御の反転(IOC制御の反転)
まず、制御の概念を理解しましょう
控制:指的是对成员变量赋值的控制权
控制反转:把对于成员变量赋值的控制权,从代码中反转(转移)到Spring工厂和配置文件中完成
好处:可以解耦合
底层原理:工厂设计模式
- Springを学習していないときは、メンバー変数の割り当てを完了するためのコードに直接アクセスします。
- これは、メンバー変数への割り当ての制御がコードに与えられていることも示しています
- このように、カップリング
public class UserServiceImpl implements UserService {
private UserDao userDao=new UserDAOImpl();
@Override
public void register(User user) {
userDao.save(user);
}
@Override
public void login(String name, String password) {
userDao.queryUserByNameAndPassword(name ,password);
}
}
しかし、Springを学習した後、構成ファイルとSpringファクトリを介してメンバー変数に値を割り当てることができます
- このとき、メンバー変数の割り当ての制御は、Spring構成ファイルとSpringファクトリに引き継がれます。
- これの利点は、分離できることです
- このとき、制御はコードからSpring構成ファイルとSpringファクトリに移されます。
public class UserServiceImpl implements UserService {
private UserDao userDao;
@Override
public void register(User user) {
userDao.save(user);
}
@Override
public void login(String name, String password) {
userDao.queryUserByNameAndPassword(name ,password);
}
}
<bean id="userdao" class="com.zyh.basic.UserDAOImpl"></bean>
<bean id="userservice" class="com.zyh.basic.UserServiceImpl">
<property name="userDao" >
<ref bean="userdao"></ref>
</property>
</bean>
制御の反転とは、実際には、メンバー変数の割り当ての制御がコードからSpring構成ファイルおよびSpringファクトリに転送されることを意味します。
Springは、IOCコンテナを介してすべてのJavaオブジェクトのインスタンス化と初期化を管理し、オブジェクト間の依存関係を制御します。IOCコンテナコンテナによって管理されるJavaオブジェクトをSpring Beanと呼びます。これは、新しいオブジェクトを作成する場合と同じです。
2.依存性注入(略してDI)
依存性注入はSpringでのプログラミング方法です
- インジェクション:Springのファクトリと構成ファイルを介してオブジェクト(Bean、コンポーネント)のメンバー変数に値を割り当てます
- 依存関係:クラスAはクラスBを使用する必要があります。つまり、AはBに依存します。依存関係があると、クラスBをAのメンバー変数として定義し、最後にSpringの構成ファイルを介して注入(割り当て)できます。
- 依存性注入は分離することができます