意味
IOC (Inversion of Control)、つまり制御の反転: オブジェクトの作成制御はプログラムによって実行されなくなり、Spring コンテナに渡されます。簡単に言えば、プログラムは新しい操作を実行する必要はなく、オブジェクトは Spring コンテナーによって直接自動的に作成されます。
DI (Dependency Injection)、つまり依存関係の注入: Spring コンテナーは、プログラムの実行時に必要なリソース (オブジェクト) を提供します。
Beanオブジェクト:IOCコンテナ内で管理・作成されるオブジェクト。
主に @Component、@Service、@Controller、@Repository、@Autowired、@Qualifier、および @Resource アノテーションによって表されます。
@Component は一般的なアノテーションであり、他の 3 つのアノテーションはこのアノテーションの派生アノテーションであり、特定の機能を持ちます。
@Controller 層は spring-mvc のアノテーションであり、コントロール層コンポーネントにアノテーションを付け、リクエストの転送とリダイレクトが処理されるかどうかを確認するために使用されます。
@Service 層はビジネス ロジック層のアノテーションです。このアノテーションは、クラスがビジネス ロジック層にあることを示すだけです。
@Repository アノテーションは永続層にあり、DAO クラスをマークし、データベース操作によってスローされるデータアクセス例外を Spring 永続層例外に自動的に変換 (カプセル化) する機能を持ちます。
メイン プログラムと同じディレクトリまたはサブパッケージ内でマークされたすべてのアノテーションは、ComponentScan (コンポーネント スキャナ) によって認識され、Spring コンテナ内に対応する Java Bean が作成されます。Bean の名前は、クラス名の最初の文字を小文字にしたものです (Admin->admin)。
@Autowired は依存関係注入のアイデアを具体化したもので、コンテナからオブジェクトを取得する際に new を介してオブジェクトを作成する必要がなくなり、コンテナ内の修飾された Bean に基づいてオブジェクト (インターフェイス実装クラス) を自動的に作成できます。インジェクションはデフォルトでタイプごとに実行されます。
@Qualifier は通常 Autowired で使用され、特定の Bean クラス名を指定できます。
@Resource は jdk によって提供されるアノテーションであり、@Autowired と @Qualifer は Spring によって提供されるアノテーションです。@Resource は、Bean のクラス名を通じて直接注入されることもあります。
プログラム例
Dao レイヤー: ArraysDao は [1,2,3] コレクションを返します
public interface BasicDao<E> {
List<E> getData();
}
@Repository //标识对象是数据存储对象,并且在容器中创建bean
public class ArraysDao implements BasicDao<Integer> {
@Override
public List<Integer> getData() {
ArrayList<Integer>arrayList=new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
return arrayList;
}
}
サービス層: Dao層を通じてデータ収集を取得します
public interface BasicService {
List<Integer> getArray();
}
@Service //将对象标识为Service对象,并在容器中创建bean
public class ArrayService implements BasicService{
@Autowired
BasicDao arraysDao;
@Override
public List<Integer> getArray() {
return arraysDao.getData();
}
}
コントローラー層:
@RestController // =@ResponseBody +@Controller 标识是控制器对象
public class TestController {
@Autowired //依赖注入,会自动注入符合BasicService接口的bean
BasicService arrayService;
@RequestMapping("/test")
public List<Integer> test(){
System.out.println(arrayService.getArray());
return arrayService.getArray();
}
}
プログラムの実行中、このインターフェース上の対応するアノテーションによって生成された Java Bean を確認できます。