[java] 봄 콩은 무엇입니까?


Answers

스프링 빈은 Spring 컨테이너에 의해 관리되는 단지 객체 인스턴스이다. 즉, 프레임 워크에 의해 생성되고 유선되어 나중에 가져올 수있는 "bag of objects"(컨테이너)에 저장된다.

"배선"부분은 의존성 주입이 무엇인지에 대한 것이며, 이것이 의미하는 바는 "나는이 것이 필요할 것"이라고 말할 수 있으며, 프레임 워크는 당신에게 적절한 인스턴스를 얻기위한 몇 가지 규칙을 따를 것입니다.

Spring에 익숙하지 않은 사람에게는 Wikipedia Spring의 기사에 멋진 설명이 있다고 생각합니다.

스프링 프레임 워크의 핵심은 리플렉션을 사용하여 Java 객체를 구성하고 관리하는 일관된 방법을 제공하는 제어 컨테이너의 반전입니다. 컨테이너는 특정 오브젝트의 오브젝트 라이프 사이클 관리를 담당합니다. 이러한 오브젝트 작성, 초기화 메소드 호출 및 오브젝트 연결을 구성하여 오브젝트를 구성합니다.

컨테이너로 작성된 오브젝트를 관리 오브젝트 또는 이라고도 합니다 . XML 파일을로드하거나 구성 클래스에서 특정 Java 주석을 감지하여 컨테이너를 구성 할 수 있습니다. 이 데이터 소스에는 bean 작성에 필요한 정보를 제공하는 bean 정의가 있습니다.

종속성 조회 또는 종속성 주입 을 통해 객체를 얻을 수 있습니다. 종속성 조회 는 호출자가 컨테이너 객체에 특정 이름 또는 특정 유형의 객체를 요청하는 패턴입니다. 의존성 주입 은 컨테이너가 생성자, 속성 또는 팩토리 메소드를 통해 이름으로 객체를 다른 객체에 전달하는 패턴입니다.

Question

나는 이해할 수있는 봄 콩에 대한 높은 수준의 정의를 아직 찾지 못하고있다. 나는 Grails의 문서와 책에서 자주 언급되는 것을 볼 수 있지만, 그것이 무엇인지 이해하는 것이 도움이 될 것이라고 나는 생각한다. 그렇다면 봄 콩은 무엇입니까? 어떻게 사용할 수 있습니까? 그들은 Dependency Injection과 관련이 있습니까?




은 봄의 핵심입니다. 그것들은 Spring에 의해 인스턴스화되고 관리되는 표준 Java 객체입니다.

콩은 주로 다음 용도로 사용됩니다.

  • 어떤 식 으로든 Spring을 설정 (데이터베이스 연결 매개 변수, 보안 등)
  • 종속성 삽입을 사용하여 종속성을 하드 코딩하지 않도록합니다. 따라서 클래스는 독립적이고 단위 테스트가 가능합니다.



먼저 봄을 이해합시다.

Spring은 가볍고 유연한 프레임 워크입니다.

유추:

Bean : Spring Container에서 생성되고, 관리되고, 파괴되는 객체이다. 컨트롤의 반전이라고하는 메타 데이터 (xml 또는 주석)를 통해 Spring Container에 객체를 삽입 할 수 있습니다.

유추 : 농부가 씨앗 (또는 콩)으로 경작하는 농지를 가지고 있다고 가정합시다. 여기서 Farmer는 Spring Framework, Farmland land는 Spring Container, Beans는 Spring Beans, Cultivating은 Spring Processor입니다.

콩 생명주기와 마찬가지로 봄 콩 역시 자신의 생명주기를 가지고 있습니다.

img 소스

다음은 Spring에서의 bean 생명주기의 순서이다.

  • 인스턴스 생성 : 먼저 스프링 컨테이너는 XML 파일에서 bean의 정의를 찾아 bean을 인스턴스화합니다.

  • 특성 채우기 : 스프링은 종속성 삽입을 사용하여 bean 정의에 지정된대로 모든 특성을 채 웁니다.

  • Bean Name 설정 : Bean이 BeanNameAware 인터페이스를 구현하면, spring은 bean의 id를 setBeanName() 메소드로 전달합니다.

  • Bean 팩토리 설정 : Bean이 BeanFactoryAware 인터페이스를 구현하면, spring은 beanfactory를 setBeanFactory() 메소드로 전달합니다.

  • Pre-Initialization : Bean의 post process라고도합니다. bean과 관련된 Bean BeanPostProcessors가 있다면, Spring은 postProcesserBeforeInitialization() 메소드를 호출한다.

  • Bean 초기화 : Bean이 IntializingBean 구현하는 경우, 해당 Bean의 afterPropertySet() 메소드가 호출됩니다. bean에 init 메소드 선언이 있으면, 지정된 초기화 메소드가 호출됩니다.

  • Post-Initialization : - Bean과 연관된 BeanPostProcessors 가 있으면 해당 postProcessAfterInitialization() 메소드가 호출됩니다.

  • 바로 사용할 수 있습니다. 이제 애플리케이션에서 Bean을 사용할 준비가되었습니다.

  • Destroy : Bean이 DisposableBean 구현하면 destroy() 메소드가 호출됩니다.




봄 콩은 클래스입니다. new 클래스를 사용하여 클래스를 인스턴스화하는 대신 응용 프로그램 컨텍스트에서 클래스 유형에 캐스팅 된 bean 인스턴스를 가져옵니다. 여기서 Bean은 응용 프로그램 컨텍스트 구성에서 구성한 것입니다. 이렇게하면 전체 응용 프로그램이 응용 프로그램 전체에 단일 범위 인스턴스를 유지 관리합니다. 모든 Bean은 응용 프로그램 컨텍스트가 인스턴스화 된 직후 구성 순서에 따라 초기화됩니다. 이벤트 응용 프로그램에서 bean을 얻지 못하면 모든 bean 인스턴스는 응용 프로그램 컨텍스트를 작성한 순간 이미 작성됩니다.




당신은 그것을 부분적으로 이해했습니다. 필요에 따라 빈을 맞춤화하고 필요할 때 스프링 컨테이너에 알리려면 Martin Fowler에 의해 작성된 IoC ( Inversion of Control )라고하는 방법론 (DI ( Dependency Injection) 이라고도 함)을 사용해야합니다.

bean을 어떤 식 으로든 연결하면, 인스턴스화를 처리하거나 bean에 대한 의존성을 평가할 필요가 없습니다. 이것은 할리우드 원칙 으로 널리 알려져 있습니다.

Google은이 질문에서 여기에 넘쳐나는 링크 외에도이 문제에 대해 더 많은 것을 탐색 할 수있는 최고의 도구입니다. :)




Links