복붙노트

[SPRING] 스프링 프레임 워크를 구성하는 방법은 몇 가지가 있습니까? 그 (것)들의 차이는 기술적으로 무엇입니까? (장단점이 아니다 ..)

SPRING

스프링 프레임 워크를 구성하는 방법은 몇 가지가 있습니까? 그 (것)들의 차이는 기술적으로 무엇입니까? (장단점이 아니다 ..)

나는이 책을 공부하고있다. (나는 이것을 강력히 추천한다.) 저자들이 스프링 프레임 워크를 구성하는 방법을 설명하는 방법에 대해 혼란 스럽다.

이 책에서 사용 된 몇 가지 코드 예를 볼 수 있습니다. (그들은 누구에게나 이용 가능합니다.) 내가 바라는 코드는 2 장의 코드가 될 것입니다.

어쨌든이 책은 Spring Container를 구성하는 3 가지 방법이 있음을 설명합니다.

XML 기반 구성

이렇게하려면 다음과 같은 XML 파일이 필요합니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" ...>

    <bean id="accountService" class="com.wiley.beginningspring.ch2.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"/>
    </bean>

    <bean id="accountDao" class="com.wiley.beginningspring.ch2.AccountDaoInMemoryImpl">
    </bean>

</beans>

그리고 나서 Spring을 부트 스트랩하기 위해 사용될 코드는 다음과 같습니다 :

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/com/wiley/beginningspring/ch2/ch2-beans.xml");

나는이 순간에 어떤 혼란도 가지지 않는다.

Java 기반 구성

이 Configuration 메서드에는 다음과 같이 구성 클래스가 있습니다.

@Configuration
public class Ch2BeanConfiguration {

    @Bean
    public AccountService accountService() {
        AccountServiceImpl bean = new AccountServiceImpl();
        bean.setAccountDao(accountDao());
        return bean;
    }

    @Bean
    public AccountDao accountDao() {
        AccountDaoInMemoryImpl bean = new AccountDaoInMemoryImpl();
        return bean;
    }
}

그리고 부트 스트래핑을 담당하는 코드는 다음과 같다.

ApplicationContext applicationContext
            = new AnnotationConfigApplicationContext(Ch2BeanConfiguration.class);

그래서 여기까지, 모든 것이 분명합니다. (Kind of ..) 나는 또한 여기에 @Configuration이라고하는 Annotation이 있음을 주목하고 싶다.

주석 기반 구성

이 책에서 설명하는 마지막 구성 방법은 주석 기반 구성입니다.

XML 기반 구성에서와 같이 xml 파일이 있지만 훨씬 작은 파일이 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" ...>
    <context:component-scan base-package="com.wiley.beginningspring.ch2"/>
</beans>

모든 빈에는 다음과 같은 주석이 있습니다.

@Component, @Service

기타..

그리고 모든 의존성에는 주석이 있습니다 :

@Autowired

콩을 주입 할 수 있습니다.

이 설정 방법으로 스프링 프레임 워크가 부트 스트래핑되는 방식은 다음과 같습니다 :

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/ch2-beans.xml");

여기에 내 질문이있다 :

Annotation Based Configuration은 실제로 ClassPathXmlApplicationContext를 사용하지만 AnnotationConfigApplicationContext는 사용하지 않는 이유는 무엇입니까? 후자는 "Annotation Based"라는 단어가있는 Configuration에 사용하는 것이 더 적절하다고 보십니까?

이 책에서 설명하는 Java Based Configuration은 Annotation Based Configuration이라고해야하는 것처럼 보입니다.

그리고 Annotation Based Configuration은 실제로 Autowired beans가있는 XML 기반의 구성과 같은 것으로 보인다. 그것은 "Java Based Configuration"이 가지고있는 @Configuration 어노테이션조차 가지고 있지 않습니다.

Spring 프레임 워크를 구성하는 방법은 몇 가지가 있습니까?

해결법

  1. ==============================

    1.혼동을 피하기 위해서, 우리는 구성 정의와 bean 정의가 두 가지 다른 것을 이해해야한다. 구성을 정의하는 세 가지 방법이 있으며, 기본적으로 Spring 4에서 사용 가능합니다.

    혼동을 피하기 위해서, 우리는 구성 정의와 bean 정의가 두 가지 다른 것을 이해해야한다. 구성을 정의하는 세 가지 방법이 있으며, 기본적으로 Spring 4에서 사용 가능합니다.

    그리고 애플리케이션에 Bean 정의를 추가하는 두 가지 방법이있다.

    보시다시피, 구성 및 bean 정의를 다른 조합으로 사용할 수 있습니다.

    xml 기반 구성을 사용하는 경우 xml을 수동으로 사용하거나 주석 (@Autowire, @Required 등)을 사용하여 드라이브 종속성 주입 방법을 선택할 수 있습니다. 늦은 경우 를 정의해야합니다. 하지만 빈 정의와 의존성 주입 제어를 혼동하지 마십시오.

    이제이 관점을 기반으로 질문에 대답 해보십시오.

    책의 저자가 개념을 뒤섞었다. 사실 이것은 주석 기반 bean 정의를 가진 xml 기반 설정이다.

    맞습니다 - Java 기반 구성은 실제로 주석을 적극적으로 사용하며 주석 기반이라고 할 수 있습니다. 그러나 주석은 Java의 일부입니다. 또한 이것은 문서에 지정된 전통적인 용어입니다.

    따라서 기본적으로 구성을 설명하는 세 가지 방법과 bean을 정의하는 두 가지 방법이 있습니다. Spring 프레임웍을 설정하는 방법은 기본적으로 6 가지가있다. 그러나 물론이 모든 방법을 서로 조합하여 사용할 수 있습니다.

  2. ==============================

    2.이를 이해하는 가장 쉬운 방법은 프레임 워크가 어떻게 개발되었는지에 대한 오랜 역사를 살펴 보는 것입니다.

    이를 이해하는 가장 쉬운 방법은 프레임 워크가 어떻게 개발되었는지에 대한 오랜 역사를 살펴 보는 것입니다.

    이들 3 (실제로 2는 1과 2가 같은 ApplicationContext 클래스를 사용함) 옆에 컨텍스트를 만드는 다른 방법이 있습니다.

  3. ==============================

    3.처음에는 Ken Bekov에게 더 많은 도움을 준 답변에 대해 감사 드리고 싶습니다. 나는 누군가가이 분야에 관해 더 많이 배울 수 있도록 그의 대답을 즉석에서 만들려고 노력했다.

    처음에는 Ken Bekov에게 더 많은 도움을 준 답변에 대해 감사 드리고 싶습니다. 나는 누군가가이 분야에 관해 더 많이 배울 수 있도록 그의 대답을 즉석에서 만들려고 노력했다.

    Spring 4는 세 가지 방법으로 구성을 정의합니다. 그들은

    특수 효과의 장점 :

    XML 파일의 장점 :

    XML 및 주석 기반 링크 :

    그루비 기반 링크 :

    Bean 정의에는 두 가지 방법이 있습니다.

    클래스 경로 검색 :

    xml-config의 경우 Groovy ctx.'component-scan '(...) 호출을 위해 java-config - @ComponentScan 주석에 대해 가됩니다.

    의존성 주입 :

    xml 기반 설정에서 의존성 주입은 xml에서 수동으로하거나 주석 (@Autowire, @Required 등)을 사용하여 수행 할 수 있습니다. 이 경우 를 정의 할 필요가있다.

    질문 답변:

    Ans : 주석 기반 Bean 정의가있는 xml 기반 구성입니다.

    응용 프로그램 컨텍스트 :

    AnnotationConfigApplicationContext :

    1.AnnotationConfigApplicationContext 및 부모 컨텍스트

    ClassPathXmlApplicationContext :

    Ans : 당신이 맞다. Java 기반 구성은 주석을 사용하고 주석 기반 구성을 호출합니다. 그러나 주석은 Java의 한 부분이며 그 밖의 것은 없습니다.

    그러나 정교하게 우리는이 계층 구조가 xml에서 어노테이션 기반과 마지막으로 그루비 기반에 이르기까지 어떻게 이해해야합니까?

    XML 설정의 대안은 꺽쇠 괄호 선언 대신 구성 요소를 배선하기 위해 바이트 코드 메타 데이터에 의존하는 주석 기반 구성에 의해 제공됩니다. XML을 사용하여 빈 배선을 설명하는 대신 개발자는 관련 클래스, 메소드 또는 필드 선언에 대한 주석을 사용하여 구성을 구성 요소 클래스 자체로 이동합니다. "예제 : RequiredAnnotationBeanPostProcessor"섹션에서 언급했듯이 BeanPostProcessor를 주석과 함께 사용하면 Spring IoC 컨테이너를 확장하는 일반적인 방법이된다. 예를 들어, Spring 2.0은 @Required 어노테이션으로 필수 속성을 적용 할 수있는 가능성을 소개했다.

    Spring 2.5는 Spring의 의존성 삽입을 유도하는 일반적인 접근 방식을 따르는 것을 가능하게했다. 본질적으로, @ Autowired 어노테이션은 6.4.5 절. "Autowiring collaborator"에서 설명한 것과 동일한 기능을 제공하지만 더 세분화 된 제어와 더 넓은 적용 성을 제공합니다.

    스프링 2.5는 또한 @PostConstruct, @PreDestroy와 같은 JSR-250 주석을 지원했다.

    Spring 3.0은 @Inject와 @Named와 같은 javax.inject 패키지에 포함 된 JSR-330 (Dependency Injection for Java) 주석을 지원했다. 이러한 주석에 대한 자세한 내용은 관련 섹션에서 확인할 수 있습니다.

    년 :

    이론적으로, 구성을 설명하는 3 가지 방법과 빈을 정의하는 2 가지 방법. Spring 프레임 워크를 설정하기 위해 (기본적으로) 3 * 2 = 6 가지 방법을 사용한다. 이 모든 방법을 서로 조합하여 사용할 수 있습니다.

    그러나 실제로는 한 단어로 XML 또는 주석을 사용하여 스프링 프레임 워크를 구성 할 수 있습니다.

  4. ==============================

    4.정확히. Spring 프레임 워크를 설정하는 방법은 두 가지뿐입니다. Spring 프레임 워크를위한 두 가지 기본 설정 도구는 다음과 같다.

    정확히. Spring 프레임 워크를 설정하는 방법은 두 가지뿐입니다. Spring 프레임 워크를위한 두 가지 기본 설정 도구는 다음과 같다.

    두 가지 모두 다음과 같은 용도로 사용할 수 있습니다.

    그리고 마지막으로 중요한 것은 :

    책에서 Java Based Configuration이라는 두 번째 방법은 @Configuration이라는 특수한 주석입니다. 주석이 달린 클래스는 일반적으로 응용 프로그램 컨텍스트의 빈이지만, 한 메서드에서 @Bean 주석을 사용하여 다른 빈을 선언 할 수도 있습니다. 그 이유는 이러한 클래스가 일반적으로 빈 스캔 대신 직접로드되기 때문입니다.

    Annotation Based Configuration이라고 불리는 세 번째 방법은 상위 레벨에서 xml 구성을 사용하고 추가 빈을 찾기 위해 패키지를 스캔하는 두 모드의 혼합입니다.

    TL / DR : 스프링 프레임 워크에서 애플리케이션 컨텍스트를 구성하는 방법은 두 가지뿐입니다.

    그들은 혼합 될 수있다.

    모든 단일 bean은 다음 세 가지 방법으로 선언 할 수 있습니다.

    이제 정확한 질문을 드리겠습니다.

    ApplicationContext는 먼저 xml 구성 파일에서 초기화되기 때문에. 패키지 검색은 나중에 태그를 사용하여 수행됩니다. AnnotationConfigApplicationContext는 구성 클래스 나 패키지 스캔을 통해 직접 초기화하는 경우 사용합니다.

    xml이 필요 없기 때문에 Java 기반이라고 부릅니다. 따라서 구성은 Java 만 사용합니다.

  5. ==============================

    5.나는이 책을 보지 못했지만 귀하의 가정은 실제로 정확합니다.

    나는이 책을 보지 못했지만 귀하의 가정은 실제로 정확합니다.

    Spring 애플리케이션을 시작하고 모든 Bean을 XML 구성된 Bean을 사용하여 프레임 워크로 인스턴스화하려면 ClassPathXmlApplicationContext를 사용해야한다.

    Spring에서 bean을 설정하는 두 가지 방법이있다.

    1) XML beans 2) 주석 접근법

    기본적으로 XML beans는 Spring 2.5-3에서 사용되고 Annotations 접근법은 Spring 4에서 더 많이 사용됩니다.

    @Bean // is a way to create a bean. It is the equalivant of the beans tag in XML.
    
    @Configuration // is a way to tell the Spring container that this class is a list of configuration beans
    

    봄에는 2 개의 봄용 용기가 있습니다.

    1) BeanFactory 2) ApplicationContext

    BeanFactory는 가장 간단한 컨테이너이며 하나의 설정 파일 만 허용합니다. ApplicationContext는 가장 진보 된 Spring 컨테이너이며 JNDI 통합, EJB 통합 및 메시지의 국제화를 지원하는 구성 파일의 배열을 허용하기 때문에 엔터프라이즈 애플리케이션에서 사용됩니다.

    도움이되기를 바랍니다.

  6. ==============================

    6.첫 번째 코딩에서 먼저 다른 코드를 보여 드리겠습니다.

    첫 번째 코딩에서 먼저 다른 코드를 보여 드리겠습니다.

    왜 그는 XML을 사용하여 구성 요소 검사를 구성했기 때문에 ClassPathXmlApplicationContext를 사용했지만 @ComponentScan을 사용한 경우 AnnotationConfigApplicationContext를 사용해야합니다.

    그래서 나를 위해 봄 컨텍스트 XML 또는 Java 구성을 초기화하는 두 가지 방법으로 간주하고 Annotation은 옵션 중 하나에서 사용할 수 있거나 전혀 사용하지 않을 수 있습니다.

  7. ==============================

    7.스프링 프레임 워크를 구성하는 세 가지 방법은 상호 배타적 인 것이 아닙니다. 사실, 내 생각에 평균적으로 당신은 적어도 두 개가 함께 사용된다는 것을 알게 될 것입니다.

    스프링 프레임 워크를 구성하는 세 가지 방법은 상호 배타적 인 것이 아닙니다. 사실, 내 생각에 평균적으로 당신은 적어도 두 개가 함께 사용된다는 것을 알게 될 것입니다.

    어노테이션 기반 구성은 소스 코드 전체에 본질적으로 흩어져있는 메타 데이터에 의존하기 때문에 독립형으로 사용할 가능성이 가장 적습니다.

    AnnotationConfigApplicationContext는 순수 주석 기반 컨텍스트를 시작하는 데 사용할 수 있지만 @Component 또는 파생 클래스로 주석 처리 된 모든 클래스를 전달해야합니다. @Configuration-annotated 클래스 (또는 @ es) - 일반적으로 실용적이지 않습니다.

    이것은 XML 또는 Java 구성에서 bean을 정적으로 나열하는 것과 거의 같지만 응용 프로그램 컨텍스트 자체를 빌드 할 때 코드에서이 작업을 수행해야한다는 사실은 유용하지 않습니다. 자동으로 응용 프로그램 컨텍스트 (웹 컨텍스트 등)를 실행하는 다양한 영리한 방법.

    따라서 전체 개체 그래프 메타 데이터를 한 번에 조립할 수 있기를 원하며 전체 개체 그래프를 설명하는 "중앙화 된"메타 데이터에 의존하는 XML 또는 Java 기반 구성을 사용해야 만 가능합니다.

    XML 및 Java 기반 접근 방식 모두에 대해이 "중앙화 된 메타 데이터"( 또는 @Configuration)는 정적으로 ( 또는 @Bean 정의로) 정적으로 정의되거나 또는 @ComponentScan을 사용하여 동적으로 정의 될 수 있습니다. . 따라서이 두 가지 접근법은 "분산화되지 않은"메타 데이터 수집을위한 주석 기반 구성의 이점을 모두 얻을 수있는 거의 동일한 기능을 가진 다른 형식 일 뿐이라고 말하는 것이 합리적입니다.

  8. from https://stackoverflow.com/questions/35807056/how-many-ways-are-there-to-configure-the-spring-framework-what-are-the-differen by cc-by-sa and MIT license