Bean? 対象?いったい何が違うの?


スプリングを習うとき、beanという言葉をよく聞きます.
Bean? 豆.私は本当にたくさん考えて、毎回これが何なのかを考えて、今すべてよく勉強しなければならないと思っています.
よく知っておきましょう
ベンって何?
スプリングはスプリングコンテナによってオブジェクトを管理し、スプリングコンテナで管理されるオブジェクトをbeanと呼ぶ.
この文章を見ると、そう思う人がいます.
対象?オブジェクトがbeanであれば、次のコードもbeanですか?
BeanTest bean = new BeanTest();
いいえ.これはただのオブジェクトで、beanではありません.
beanが相手って言ったでしょ?でもどうしてこれじゃないの?
正確にはIoCコンテナ管理の対象です.
どういう意味だと思う?
上のコードはオブジェクトで、beanではありません.IoC容器は管理しないからです.
では、この和弦はどうですか.
ApplicationContext applicationContext;
public void Bean(){
	BeanTest bean = applicationContext.getBean(BeanTest.class);
}
ここで宣言したbeanはbeanですか?そうだ.ApplicationContextで管理しているからです.
ApplicationContextはbeanファクトリを継承したSpringコンテナのタイプです.
スプリングコンテナ管理、IoCコンテナ管理.これはどういう意味ですか.
最初は筆者もこの2つが違うと思っていましたが、勉強の中でこの2つが同じであることがわかりました.
なぜ同じなのか、IOC/DI関連の記事で説明しましょう
beanの作成方法
Component ScanningメソッドまたはXMLまたはJavaプロファイルに直接登録するメソッド.
Component Scanning
この点を理解するために、深く理解してみましょう.
@Controllerまたは@RestControllerを使用します.これはComponentと呼ばれています.
これは何の音か,おそらく頭がつかめないだろう.
最初からゆっくり研究する.
@RestController
public void getBeans(){}
このようなRestControllerがあると言います.
ここのRestControllerはどんな顔をしていますか?
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
	@AliasFor(annotation = Controller.class)
	String value() default "";

}
こんな風に育つ.以上、様々な説明がありますが、筆者は上記で、Controllerはコンポーネントで構成されています.コントローラに入りましょう
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
	@AliasFor(annotation = Component.class)
	String value() default "";

}
Controllerはこのような人ですが、コンポーネント言語を使っています.さらに中に入ってみると良いのですが、まずコンポーネントスキャンを知るためにここまで知っておき、Controller操作とRestController操作がコンポーネントで縛られていると思えば便利です.
では、どこでスキャンしますか?
SpringBootアプリケーションを作成する場合は、src/main/javaで[プロジェクト名]アプリケーションを作成します.javaというファイルがあるはずです.この中を見せてください.
@SpringBootApplication
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}
こう書いてあります.
SpringBootApplicationの説明でSpringBootのスタートです.
でもどうして急にこんなことを言ったの?次に、宣言には、コンポーネントスキャンを行う論理が含まれます.
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication { ... }
省略されている部分も多いですが、SpringBootApplicationの名前はどうなっているのでしょうか、ComponentScanがあります.はい、次にノイズの中でコンポーネントスキャンを行う機能です.
中に入ってみるといろいろな論理がありますが、そこまで知るには時間もかかるのでここまで知っておきましょう
ComponentScan Arotationは「Componentを探せ!一種の模倣といえる.
どこから探せばいいですか?
SpringBootアプリケーション宣言からすべてのサブパッケージに貼られると、筆者が前述したRestControlまたはControlは、必ずしもこの2つだけではなく、Repository、Service、Configurationを使用する宣言があります.その代表的なものが筆者が今述べている.
彼らを全部見つけてbeanとして登録します.
Java設定
XMLやJavaでの設定方法は、Javaでの設定方法について解説します.
public class TestConfig{}
上記のカテゴリがあると仮定します.
上のクラスにbeanを登録する設定コードを書きます.
まず、構成説明を作成し、クラスにbeanを登録します.
@Configuration
public class TestConfig{
	@Bean
	public TestController testController(){
		return new TestController();
	}
}
このように記述すると、TestControllerはbeanオブジェクトになります.
RestControllerやConrollerやComponentを貼らなくてもBen対象になりますか?
そうだ.貼る必要はありません
public class TestController{}
このように書いても,このテストコントローラはbeanオブジェクトとなる.
beanオブジェクトの読み込み
テストコードを簡単に作成して理解してください.
ApplicationContextのみ使用
上記の例では、ApplicationContextを使用してbeanの使用方法を例に挙げ、テストコードを記述するために使用します.
@SpringBootTest
public class TestConrollerTest{
	private final ApplicationContext applicationContext;
    
  public TestConrollerTest(ApplicationContext applicationContext){
      this.applicationContext = applicationContext;
  }

	@Test
	public void TestDI(){
		TestConroller bean = applicationCotnext.getBean(TestConroller);
		assertThat(bean).isNotNull;
	}
}
この形式でbeanを呼び出すことができます.
でもそうすると、生成者を呼んで、コードが長くなったような気がします.
Autowiredを使用してロードできます.
Autowired + ApplicationContext
@SpringBootTest
public class TestConrollerTest{
	@Autowired
	ApplicationContext applicationContext;

	@Test
	public void TestDI(){
		TestConroller bean = applicationCotnext.getBean(TestConroller);
		assertThat(bean).isNotNull;
	}
}
Autowired Arnolationを使用して、関数を構築することなく使用できます.
以下の動画をもとに筆者がまとめた内容.一度見ればよかった.本当に良いビデオでした
例題学習のスプリング入門7。空(bean)