Programming

세계에서 봄 콩은 무엇입니까?

procodes 2020. 2. 27. 22:30
반응형

세계에서 봄 콩은 무엇입니까?


나는 아직 이해할 수있는 Spring bean에 대한 높은 수준의 정의를 찾지 못했습니다. Grails 문서와 책에서 자주 참조되는 것을 보았지만 그 내용을 이해하면 도움이 될 것이라고 생각합니다. 스프링 빈은 무엇입니까? 그들은 어떻게 사용될 수 있습니까? 의존성 주입과 관련이 있습니까?


애플리케이션의 백본을 형성하고 Spring IoC * 컨테이너로 관리되는 객체를 Bean이라고합니다. Bean은 Spring IoC 컨테이너에 의해 인스턴스화, 조립 및 관리되는 객체입니다. 이 Bean은 컨테이너에 제공하는 구성 메타 데이터 (예 : XML 정의 형식)로 작성됩니다.

SpringSource 에서 bean과 scope에 대해 더 배우기 :

Bean 정의를 작성할 때 실제로 작성하는 것은 해당 Bean 정의에 의해 정의 된 클래스의 실제 인스턴스를 작성하기위한 레시피입니다. 빈 정의가 레시피라는 아이디어는 중요합니다. 이는 클래스와 마찬가지로 단일 레시피에서 많은 객체 인스턴스를 생성 할 수 있기 때문입니다.

특정 Bean 정의에서 작성된 오브젝트에 연결될 다양한 종속성 및 구성 값뿐만 아니라 특정 Bean 정의에서 작성된 오브젝트의 범위도 제어 할 수 있습니다. 이 접근 방식은 매우 강력하며 Java 클래스 수준에서 객체의 범위를 '구울'필요없이 구성을 통해 생성 한 객체의 범위를 유연하게 선택할 수 있습니다. Bean은 여러 범위 중 하나에 배치되도록 정의 할 수 있습니다.

* IoC : 제어 역전


스프링 빈은 스프링 컨테이너에 의해 관리되는 객체 인스턴스입니다. 즉, 프레임 워크에 의해 생성되고 연결되어 나중에 얻을 수있는 "오브젝트 백"(컨테이너)에 저장됩니다.

"배선"부분은 의존성 주입에 관한 것입니다. 즉, "이것이 필요할 것입니다"라고 말할 수 있으며 프레임 워크는 적절한 인스턴스를 얻기 위해 몇 가지 규칙을 따릅니다.

Spring에 익숙하지 않은 누군가를 위해 Wikipedia Spring의 기사에 좋은 설명이 있다고 생각합니다 .

Spring Framework의 핵심은 컨트롤 컨테이너의 반전으로, 리플렉션을 사용하여 Java 객체를 구성하고 관리하는 일관된 수단을 제공합니다. 컨테이너는 특정 객체의 객체 수명주기 관리 (이러한 객체 생성, 초기화 메소드 호출 및 객체를 함께 연결하여 구성)를 담당합니다.

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

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


먼저 Spring을 이해하자.

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

유추:
여기에 이미지 설명을 입력하십시오

Bean : 스프링 컨테이너에서 생성, 관리 및 파괴되는 객체입니다. 메타 데이터 (xml 또는 주석)를 통해 스프링 컨테이너에 객체를 주입 할 수 있는데,이를 제어 역전이라고합니다.

유추 : 농부가 씨앗 (또는 콩)으로 경작하는 농지를 가지고 있다고 가정 해 봅시다. 여기, 농부는 스프링 프레임 워크, 농지 토지는 스프링 컨테이너, 콩은 스프링 콩, 재배는 스프링 프로세서입니다.

여기에 이미지 설명을 입력하십시오

빈 수명주기와 마찬가지로 스프링 빈도 자체 수명주기를 갖습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

img 소스

다음은 Spring에서 Bean 라이프 사이클의 순서입니다.

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

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

  • Bean 이름 설정 : Bean이 BeanNameAware인터페이스를 구현하는 경우 spring은 Bean의 id를 setBeanName()메소드에 전달합니다 .

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

  • 사전 초기화 : Bean의 사후 프로세스라고도합니다. Bean과 연관된 Bean BeanPostProcessors가 있으면 Spring은 postProcesserBeforeInitialization()메소드를 호출 합니다.

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

  • 사후 초기화 : – BeanPostProcessorsBean과 연관된 항목 이 있으면 해당 postProcessAfterInitialization()메소드가 호출됩니다.

  • 사용 준비 : 이제 Bean은 응용 프로그램에서 사용할 준비가되었습니다.

  • 파기 : Bean이 구현 DisposableBean하면 destroy()메소드 를 호출합니다.


글쎄, 당신은 그것을 부분적으로 이해했습니다. 필요에 따라 빈을 조정하고 의존성 주입 (DI) 이라고도 하는 Martin Fowler가 만든 IoC ( Inversion of Control ) 로 알려진 방법론을 사용하여 필요에 따라 빈을 관리하도록 Spring 컨테이너에 알려 주어야합니다 .

Bean의 방식을 연결하여 Bean의 인스턴스화를 처리하거나 종속성을 평가할 필요가 없습니다. 이것은 할리우드 원칙 으로 널리 알려져 있습니다 .

Google은이 질문에 쇄도 할 수있는 링크 외에도 이에 대해 더 자세히 알아볼 수있는 최고의 도구입니다. :)


봄에는 콩 주머니를 운반하는 IoC 용기가 있습니다. 생성 유지 및 삭제는 Spring Container의 책임입니다. 우리는 배선과 자동 배선을 통해 콩을 스프링에 넣을 수 있습니다. 배선은 XML 파일에 수동으로 구성하고 "자동 배선"은 주석을 Java 파일에 넣은 다음 Spring이 Java 구성 파일의 루트 컨텍스트를 자동으로 스캔하여 스프링 백에 넣는 것을 의미합니다.

다음은 Beans에 대한 자세한 정보를 제공하는 세부 URI입니다.


  • 스프링 빈은 스프링 IOC 컨테이너에 의해 관리되는 객체 인스턴스입니다.

  • Spring IOC 컨테이너는 Bag of Bean을 가지고 있습니다 .Bean 생성, 유지 및 삭제는 Spring 컨테이너의 책임입니다.

  • 우리는 배선과 자동 배선을 통해 콩을 스프링에 넣을 수 있습니다.

  • 배선은 수동으로 XML 파일로 구성한다는 의미입니다.

  • 자동 배선은 주석을 Java 파일에 넣은 다음 Spring이 자동으로 java 구성 파일의 루트 컨텍스트를 스캔하여 스프링 백에 넣는 것을 의미합니다.


봄 콩은 수업입니다. 을 사용하여 클래스를 인스턴스화하는 대신 애플리케이션 컨텍스트에서 클래스를 캐스트로 new인스턴스로 가져옵니다. bean여기서 Bean은 애플리케이션 컨텍스트 구성에서 구성한 것입니다. 이런 식으로 전체 응용 프로그램은 응용 프로그램 전체에서 단일 범위 인스턴스를 유지 관리합니다. 모든 Bean은 애플리케이션 컨텍스트가 인스턴스화 된 직후 구성 순서에 따라 초기화됩니다. 애플리케이션에 Bean이 없으면 애플리케이션 컨텍스트를 작성한 직후 모든 Bean 인스턴스가 이미 작성됩니다.


Spring에서는 애플리케이션의 백본을 형성하고 Spring IoC 컨테이너에 의해 관리되는 객체를 Bean이라고합니다. Bean은 단순히 Spring IoC 컨테이너에 의해 인스턴스화, 조립 및 관리되는 객체입니다.


Spring의 경우 모든 객체는 콩입니다! Spring Framework의 기본 단계는 객체를 Bean으로 정의하는 것입니다. 빈은 클래스 정의를 살펴봄으로써 스프링 프레임 워크에 의해 생성되는 객체 인스턴스 일뿐입니다. 이러한 정의는 기본적으로 구성 메타 데이터를 구성합니다. 그런 다음 프레임 워크는이 구성 메타 데이터를 기반으로 오브젝트를 인스턴스화하고, 종속성을 설정하고 주입해야하는 계획, 새로 작성된 인스턴스의 범위 등을 계획합니다.

메타 데이터는 첫 번째 장에서와 같이 간단한 XML 파일로 제공 될 수 있습니다. 또는 메타 데이터를 주석 또는 Java 구성으로 제공 할 수 있습니다.

책 : 저스트 스프링


Spring의 XML 구성은 Bean으로 구성되며 Bean은 기본적으로 클래스입니다. 그것들은 우리가 ApplicationContext 내에서 사용하는 POJO입니다. Beans 정의는 new 키워드를 대체하는 것으로 생각할 수 있습니다. 따라서 응용 프로그램에서 new 키워드를 사용하는 곳마다 다음과 같습니다.

MyRepository myRepository =new MyRepository ();

어딘가에 새로운 키워드를 사용하는 경우 해당 구성을 제거하고 XML 파일에 배치하는 것을 볼 수 있습니다. 그래서 우리는 다음과 같이 코딩 할 것입니다 :

<bean name="myRepository " 
      class="com.demo.repository.MyRepository " />

이제 Setter Injection / Constructor Injection을 사용할 수 있습니다. Setter Injection을 사용하고 있습니다.

public class MyServiceImpl implements MyService {
    private MyRepository myRepository;
    public void setMyRepository(MyRepository myRepository)
        {
    this.myRepository = myRepository ;
        }
public List<Customer> findAll() {
        return myRepository.findAll();
    }
}

참고 URL : https://stackoverflow.com/questions/17193365/what-in-the-world-are-spring-beans



반응형