spring봄 시작하기

비고

Spring Framework는 Java 플랫폼 용 오픈 소스 애플리케이션 프레임 워크 및 컨트롤 컨테이너의 반전입니다.

버전

번역 출시일
4.3.x 2016-06-10
4.2.x 2015-07-31
4.1.x 2014-09-14
4.0.x 2013-12-12
3.2.x 2012-12-13
3.1.x 2011 년 12 월 13 일
3.0.x 2009-12-17
2.5.x 2007-12-25
2.0.x 2006-10-04
1.2.x 2005-05-13
1.1.x 2004-09-05
1.0.x 2003-03-24

설치 (XML 구성)

Hello Spring을 만드는 단계 :

  1. Spring Boot 를 조사하여 이것이 여러분의 필요에 더 잘 맞는지 확인하십시오.
  2. 올바른 의존성을 가지고 프로젝트를 설정하십시오. Maven 또는 Gradle을 사용하는 것이 좋습니다.
  3. POJO 클래스 만들기 (예 : Employee.java
  4. 클래스 및 변수를 정의 할 수있는 XML 파일을 작성하십시오. 예 : beans.xml
  5. 메인 클래스, 예를 들어 Customer.java 생성하십시오.
  6. 의존성으로 봄 - 콩 (및 그 전이 종속성!)을 포함하십시오.

Employee.java :

package com.test;

public class Employee {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void displayName() {
        System.out.println(name);
    }
}

beans.xml :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
        
    <bean id="employee" class="com.test.Employee">
        <property name="name" value="test spring"></property>
    </bean>

</beans>

Customer.java :

package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Customer {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

      Employee obj = (Employee) context.getBean("employee");
      obj.displayName();
   }
}

예제로 핵심 스프링 기능 보여주기

기술

/ showcasing : 최소한의 의존성 필요, Java 구성 , 주석 및 Java 구성에 의한 Bean 선언 , 생성자와 속성에 의한 종속성 주입 , Pre / Post 후크를 포함하는 독립 실행 형 예제입니다.

종속성

이러한 종속성은 클래스 경로에 필요합니다.

  1. 봄의 핵
  2. 봄의 문맥
  3. 봄 콩
  4. 춘추
  5. 봄식
  6. 커먼스 로깅

메인 클래스

결국부터 Main 클래스의 Main 클래스가 Main main() 메서드의 자리 표시 자 역할을합니다.이 클래스는 Configuration 클래스를 가리켜 Application Context를 초기화하고 특정 기능을 보여주기 위해 필요한 다양한 Bean을 모두로드합니다.

package com.stackoverflow.documentation;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;



public class Main {

    public static void main(String[] args) {

        //initializing the Application Context once per application.
        ApplicationContext applicationContext = 
                new AnnotationConfigApplicationContext(AppConfig.class);

        //bean registered by annotation
        BeanDeclaredByAnnotation beanDeclaredByAnnotation = 
                applicationContext.getBean(BeanDeclaredByAnnotation.class);
        beanDeclaredByAnnotation.sayHello();

        //bean registered by Java configuration file
        BeanDeclaredInAppConfig beanDeclaredInAppConfig = 
                applicationContext.getBean(BeanDeclaredInAppConfig.class);
        beanDeclaredInAppConfig.sayHello();

        //showcasing constructor injection
        BeanConstructorInjection beanConstructorInjection = 
                applicationContext.getBean(BeanConstructorInjection.class);
        beanConstructorInjection.sayHello();

        //showcasing property injection
        BeanPropertyInjection beanPropertyInjection = 
                applicationContext.getBean(BeanPropertyInjection.class);
        beanPropertyInjection.sayHello();

        //showcasing PreConstruct / PostDestroy hooks
        BeanPostConstructPreDestroy beanPostConstructPreDestroy = 
                applicationContext.getBean(BeanPostConstructPreDestroy.class);
        beanPostConstructPreDestroy.sayHello();
    }
}

응용 프로그램 구성 파일

구성 클래스는 @Configuration 의해 주석을 달고 초기화 된 응용 프로그램 컨텍스트의 매개 변수로 사용됩니다. 구성 클래스의 클래스 수준에있는 @ComponentScan 주석은 주석을 사용하여 등록 된 Bean 및 종속성에 대해 스캔 할 패키지를 가리 킵니다. 마지막으로 @Bean 어노테이션은 설정 클래스에서 빈 정의로 사용된다.

package com.stackoverflow.documentation;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.stackoverflow.documentation")
public class AppConfig {

    @Bean
    public BeanDeclaredInAppConfig beanDeclaredInAppConfig() {
        return new BeanDeclaredInAppConfig();
    }
}

Annotation에 의한 Bean 선언

@Component 주석은 POJO를 컴포넌트 스캔 중에 등록 할 수있는 Spring 빈으로 구분하는 역할을한다.

@Component
public class BeanDeclaredByAnnotation {

    public void sayHello() {
        System.out.println("Hello, World from BeanDeclaredByAnnotation !");
    }
}

응용 프로그램 구성 별 콩 선언

Bean 선언 / 정의가 Application Configuration 클래스 파일에서 발생하기 때문에 POJO에 주석을 달거나 표시하지 않아도됩니다.

public class BeanDeclaredInAppConfig {

    public void sayHello() {
        System.out.println("Hello, World from BeanDeclaredInAppConfig !");
    }
}

생성자 삽입

@Autowired 주석은 생성자 수준에서 설정됩니다. 명시 적으로 이름으로 정의하지 않는 한, 기본 autowiring은 bean 유형 (이 경우 BeanToBeInjected )에 따라 발생합니다.

package com.stackoverflow.documentation;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class BeanConstructorInjection {

    private BeanToBeInjected dependency;

    @Autowired
    public BeanConstructorInjection(BeanToBeInjected dependency) {
        this.dependency = dependency;
    }

    public void sayHello() {
        System.out.print("Hello, World from BeanConstructorInjection with dependency: ");
        dependency.sayHello();
    }
}

속성 주입

@Autowired 어노테이션은 JavaBeans 표준을 따르는 setter 메소드를 구분합니다.

package com.stackoverflow.documentation;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class BeanPropertyInjection {

    private BeanToBeInjected dependency;

    @Autowired
    public void setBeanToBeInjected(BeanToBeInjected beanToBeInjected) {
        this.dependency = beanToBeInjected;
    }

    public void sayHello() {
        System.out.println("Hello, World from BeanPropertyInjection !");
    }
}

PostConstruct / PreDestroy 후크

@PostConstruct@PreDestroy 후크에 의해 Bean의 초기화와 파괴를 가로 챌 수 있습니다.

package com.stackoverflow.documentation;

import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component
public class BeanPostConstructPreDestroy {

    @PostConstruct
    public void pre() {
        System.out.println("BeanPostConstructPreDestroy - PostConstruct");
    }

    public void sayHello() {
        System.out.println(" Hello World, BeanPostConstructPreDestroy !");
    }

    @PreDestroy
    public void post() {
        System.out.println("BeanPostConstructPreDestroy - PreDestroy");
    }
}

스프링 프레임 워크 란 무엇입니까? 왜 우리는 그것을 가져야합니까?

Spring은 클래스의 묶음을 제공하는 프레임 워크이며, 우리는 코드에 보일러 플레이트 로직을 작성할 필요가 없으므로 Spring은 J2ee에 추상 레이어를 제공한다.


간단한 JDBC 응용 프로그램에서 예를 들어 프로그래머가

  1. 드라이버 클래스로드하기
  2. 연결 만들기
  3. 명령문 오브젝트 작성 중
  4. 예외 처리
  5. 쿼리 만들기
  6. 쿼리 실행
  7. 연결 닫기

모든 프로그래머가 동일한 코드를 작성하므로 보일러 플레이트 코드로 취급됩니다. 따라서 프레임 워크는 단순화를 위해 상용구 논리를 처리하고 프로그래머는 비즈니스 논리 만 작성해야합니다. 따라서 Spring 프레임 워크를 사용하여 최소한의 코드 라인으로 신속하게 프로젝트를 개발할 수 있습니다. 버그없이 개발 비용과 시간도 줄일 수 있습니다.

그렇다면 왜 스프링을 스트럿으로 선택해야할까요?

스트럿은 웹 측면에만 솔루션을 제공하는 프레임 워크이며 스트럿은 실제로 침입적입니다. Spring은 Struts에 비해 많은 기능을 가지고 있으므로 Spring을 선택해야합니다.

  1. Spring은 본질적으로 비 침습적 입니다. 즉, 클래스를 확장하거나 클래스에 인터페이스를 구현할 필요가 없습니다.
  2. Spring은 다양한 기능을 제공합니다 . 즉, 프로젝트의 기존 기술과 통합 될 수 있습니다.
  3. Spring은 엔드 투 엔드 프로젝트 개발 제공합니다. 즉, 비즈니스 레이어, 지속성 레이어와 같은 모든 모듈을 개발할 수 있습니다.
  4. Spring은 가벼운 무게입니다 . 즉, 특정 모듈에서 작업하고 싶다면 완전한 Spring을 배울 필요가 없으며 특정 모듈 (예 : Spring Jdbc, Spring DAO)을 배울 필요가 있습니다.
  5. Spring은 의존성 주입을 지원 한다 .
  6. Spring은 여러 개의 프로젝트 개발을 지원합니다 : 예를 들어 코어 자바 애플리케이션, 웹 애플리케이션, 분산 애플리케이션, 엔터프라이즈 애플리케이션.
  7. Spring은 교차 절단 문제에 대한 Aspect 지향 프로그래밍을 지원합니다.

결국 Spring이 Struts에 대한 대안이라고 말할 수 있습니다. 그러나 Spring은 J2EE API를 대체하지 않습니다. Spring이 제공하는 클래스는 내부적으로 J2EE API 클래스를 사용합니다. Spring은 방대한 프레임 워크이므로 여러 모듈로 나뉩니다. 모듈은 스프링 코어를 제외하고는 다른 모듈에 의존하지 않습니다. 일부 중요 모듈은 다음과 같습니다.

  1. 스프링 코어
  2. Spring JDBC
  3. 봄의 AOP
  4. 봄 거래
  5. 봄 ORM
  6. 스프링 MVC