Spring Framework는 정확히 무엇입니까? [닫은]


623

Spring 에 대해 많은 사람들이 듣고 있습니다. 사람들은 웹에서 Spring이 웹 개발을위한 좋은 프레임 워크라고 말하고 있습니다. Spring Framework는 정확히 무엇입니까?


10
나는 질문이 매우 광범위하다는 것을 이해하지만,이 매우 특별한 경우에는 질문이 너무 인기가 있다고 생각하는 사람들에 의해 Spring에 대해 자주 말하는 접합 개발자에게 매우 중요하다고 생각합니다. 그렇습니다. 인스 타 그램과 그 목적이 무엇인지 들어 본 적이 없다면 손을 들어주세요 .. (고백 : 나는 Insta를 사용한 적이 없습니다)
usr-local-ΕΨΗΕΛΩΝ

2
10 년 전에 질문을 받았으며 그 당시 Spring은 Spring Boot, Spring Data, Spring Rest 등과 같은 모든 하위 프로젝트에서 현재보다 약간 작았습니다. 이 질문의 넓음. 이 질문을 할 당시에는 DI와 그 이유가 무엇인지 이해하고 싶었습니다.
Maksim

답변:


713

기본적으로 Spring은 이는 매우 분리 된 시스템을 구축 할 수있는 패턴입니다.

문제

예를 들어, 시스템 사용자를 나열하여 다음과 같은 인터페이스를 선언해야한다고 가정하십시오 UserLister.

public interface UserLister {
    List<User> getUsers();
}

그리고 모든 사용자를 얻기 위해 데이터베이스에 액세스하는 구현 일 수도 있습니다.

public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

보기에는 인스턴스에 액세스해야합니다 (예를 들어, 기억하십시오).

public class SomeView {
    private UserLister userLister;

    public void render() {
        List<User> users = userLister.getUsers();
        view.render(users);
    }
}

위의 코드는 변수를 초기화하지 않았습니다 userLister. 우리는 무엇을해야합니까? 다음과 같이 명시 적으로 객체를 인스턴스화하면 :

UserLister userLister = new UserListerDB();

... DB에 액세스하는 클래스의 구현과 견해를 결합했습니다. DB 구현에서 쉼표로 구분 된 파일에서 사용자 목록을 가져 오는 다른 구현으로 전환하려면 어떻게해야합니까 (예시)? 이 경우 코드로 다시 이동하여 위의 행을 다음과 같이 변경하십시오.

UserLister userLister = new UserListerCommaSeparatedFile();

이와 같은 작은 프로그램에는 아무런 문제가 없지만 수백 개의 뷰와 유사한 수의 비즈니스 클래스가있는 프로그램에서는 어떻게됩니까? 정비는 악몽이된다!

스프링 (의존성 주입) 접근

Spring이하는 일은 XML 파일이나 주석을 사용하여 클래스 를 연결 하는 것입니다. 이렇게하면 모든 객체가 Spring에 의해 인스턴스화되고 초기화되고 올바른 위치 (서블릿, 웹 프레임 워크, 비즈니스 클래스, DAO 등)에 주입 됩니다. ...).

Spring의 예제로 돌아가서 userLister필드에 대한 setter 가 있고 다음과 같은 XML 파일이 필요합니다.

<bean id="userLister" class="UserListerDB" />

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>

또는 단순히 뷰 클래스에 정리 된 파일에 @Inject다음 과 같이 주석을 답니다 .

@Inject
private UserLister userLister;

뷰가 만들어집니다이 방법 마술은 해야합니다 UserLister작업을 준비합니다.

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code

대단해! 그렇지 않습니까?

  • UserLister인터페이스의 다른 구현을 사용하려면 어떻게합니까? XML 만 변경하면됩니다.
  • UserLister구현이 준비 되지 않은 경우 어떻게 합니까? 일시적인 모의 구현을 프로그래밍 UserLister하고 뷰 개발을 용이하게합니다.
  • Spring을 더 이상 사용하지 않으려면 어떻게해야합니까? 그냥 사용하지 마십시오! 응용 프로그램이 연결되어 있지 않습니다. 제어 상태 반전 : "응용 프로그램이 프레임 워크를 제어하는 ​​것이 아니라 응용 프로그램이 프레임 워크를 제어합니다".

의존성 주입에 대한 다른 옵션이 있습니다. 내 의견으로는 Spring의 단순성, 우아함 및 안정성 외에도 SpringSource를 유명하게 만든 이유는 SpringSource의 사람들이 Spring을 다른 많은 공통 프레임 워크와 통합하는 데 도움이되는 많은 POJO를 프로그래밍했다는 것입니다 응용 프로그램에 방해가되지 않습니다. 또한 Spring에는 Spring MVC, Spring WebFlow, Spring Security와 같은 몇 가지 좋은 하위 프로젝트가 있으며 다시 등 다양한 목록이 있습니다.

도움이 되었기를 바랍니다. 어쨌든, 나는 의존성 주입과 제어 반전에 관한 Martin Fowler의 기사 를 읽으십시오 . 기본 사항을 살펴 가지고 이해 한 후 봄 문서를 내 의견으로는, 됩니다 로 사용 지금까지 최고의 봄 책.


148
코드 줄과 XML 줄을 변경해야하는 차이점은 무엇입니까? 외부 XML 파일이 복잡성을 추가 할 수 있기 때문에 노력과 유지 보수는 정확히 동일하거나 더 나쁩니다. 미안하지만 나는 그것을 얻지 못한다. 나는 아무런 이익도 보지 못한다. 뭔가 빠진 것이 있으면 기입 해주세요.
프레드

23
@fred-당신이 단위 테스트를하고 있다고 상상해보십시오. 의존성 주입 (DI는 주석 또는 XML과 함께 사용할 수 있음)이 없으면 종속성을 조롱 할 수 없으므로 올바르게 테스트 할 수 없습니다.
Petar Minchev

18
@fred-XML에 모든 주입을 정의하는 것은 실제로 의미가 없습니다. 유지하기에는 엄청난 오버 헤드가 있습니다. 이를 위해 EJB는 주입 지점에 대한 주석 개념을 도입했습니다. 그것들은 훨씬 간단하고 기본 인스턴스가 주입됩니다 (단위 테스트의 경우 한 번 변경할 수 있음). 이것은 Spring이 이제이 접근법을 복사 한 것처럼 잘 작동했습니다. 필요한 경우 (실제로 필요한 경우에만) 주석을 EJB의 XML로 대체 할 수 있습니다.
Mike Braun

36
또는 팩토리 정적 메소드를 사용하십시오. 팩토리의 반환 유형을 변경하면 해당 반환 값을 사용하는 모든 클래스가 변경됩니다. Presto Spring은 이제 더 이상 필요하지 않습니다 ...
Qix-MONICA가 MISTREATED

16
@mmcrae XML을 쓰는 것보다 IDE에서 하나의 리팩토링 호출을하고 싶습니다.
Qix-MONICA가 MISTREATED

63

봄이 포함 ( Skaffman 바르게 지적 MVC 프레임 워크를). 간단히 말해 여기에 내 의견이 있습니다. Spring은 서비스 계층, 웹 계층 및 비즈니스 계층의 분리를 지원하지만 실제로 가장 잘하는 것은 객체의 "주입"입니다. 따라서 예를 들어 아래 예를 고려하십시오.

public interface FourWheel
{
   public void drive();
}

public class Sedan implements FourWheel
{
   public void drive()
   {
      //drive gracefully
   }
}

public class SUV implements FourWheel
{
   public void drive()
   {
      //Rule the rough terrain
   }
}

이제 코드에는 RoadTrip이라는 클래스가 있습니다.

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

이제 여행 인스턴스를 원할 때마다; 때로는 SUV가 FourWheel을 초기화하거나 때로는 세단을 원할 수도 있습니다. 특정 상황에 따라 실제로 원하는 것에 달려 있습니다.

이 문제를 해결하려면 팩토리 패턴을 생성 패턴으로 사용하려고합니다. 팩토리가 올바른 인스턴스를 반환하는 곳. 결국에는 객체를 올바르게 인스턴스화하기 위해 많은 접착제 코드가 생깁니다. Spring은 글루 코드없이 글루 코드 작업을 가장 잘 수행합니다. XML로 매핑을 선언하면 객체가 자동으로 초기화됩니다. 또한 인스턴스에 싱글 톤 아키텍처를 많이 사용하며 메모리 사용을 최적화하는 데 도움이됩니다.

이를 Inversion Of Control이라고도합니다. 이를위한 다른 프레임 워크는 Google guice, Pico 컨테이너 등입니다.

이 외에도 Spring은 유효성 검사 프레임 워크, JDBC, iBatis 및 Hibernate (및 그 이상)와 공동으로 DAO 계층을 광범위하게 지원합니다. 데이터베이스 트랜잭션에 대한 탁월한 트랜잭션 제어 기능을 제공합니다.

"Pro Spring"과 같은 좋은 책에서 읽을 수있는 Spring에는 더 많은 것이 있습니다.

다음 URL도 도움이 될 수 있습니다.
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article .tss? l = SpringFramework


5
Spring MVC 프레임 워크를 포함 합니다. 그러나 그것은 그 이상입니다.
skaffman 2016 년

nitpick을 너무 많이 원하지 않으면 서 WebMVC는 핵심 스프링 배포판의 일부입니다. Webflow, RCP 등은 그렇지 않습니다.
skaffman 2016 년

1
의 좋은 것을, 나는 당신이 자바를 입력 인터페이스의 객체 인스턴스화 할 수 있다는 것을 알고하지 않았다 - 불법 @skaffman 도움이 날이 대답을 이해를 (FourWheel의 인스턴스 참조)
Jossie 칼데론

47

예전에는 Spring 은 ( Guice , PicoContainer , ...) 와 같은 의존성 주입 프레임 작업 이었지만 현재는 엔터프라이즈 애플리케이션 을 구축하기위한 토탈 솔루션입니다 .

봄 의존성 주입은 물론 봄의 핵심은 여전히 ​​있으며 (여기에서 다른 좋은 대답을 검토 할 수 있음) 봄부터 더 있습니다 ...

Spring은 이제 많은 하위 프로젝트를 가진 많은 프로젝트를 가지고 있습니다 ( http://spring.io/projects ). 누군가가 봄에 대해 이야기 할 때, 그가 이야기 하고있는 봄 프로젝트 , 스프링 프레임 워크 라고 알려진 스프링 코어 또는 다른 봄 프로젝트 인지 알아야 합니다.

너무 언급 할 가치가있는 일부 봄 프로젝트는 다음과 같습니다.

응용 프로그램에 대해 더 많은 기능을 지정해야하는 경우 여기에서도 찾을 수 있습니다.


  • 배치 애플리케이션 개발을 지원하도록 설계된 스프링 배치 배치 프레임 워크
  • HATEOAS 원칙에 기반한 REST API의 Spring HATEOAS 손쉬운 작성
  • 모바일 애플리케이션 개발을위한 Spring MobileSpring Andriod
  • Spring Shell 은 모든 기능을 갖춘 쉘 (일명 명령 행) 애플리케이션을 빌드합니다.
  • 클라우드 애플리케이션을위한 Spring CloudSpring Cloud 데이터 흐름

spring-social-facebook과 같은 작은 프로젝트도 있습니다 ( http://projects.spring.io/spring-social-facebook/ )

Spring Framework 프로젝트의 Spring MVC일부인 모듈 이 있으므로 웹 개발에 spring을 사용할 수 있습니다 . 또는 struts2 와 같은 다른 웹 프레임 워크와 함께 spring을 사용할 수 있습니다 .


1
실제로 mvc, data, jpa 및 Spring의 다른 부분에는 Spring의 코어 DI를 사용하지 않고 대신 Dagger를 Spring의 중심에 두는 옵션이 있습니다.
dlamblin

25

Spring이란 무엇입니까? 나는 그 질문에 곧 대답 할 것이지만, 먼저 빅토르 휴고의 예를 다시 살펴 보겠습니다. 새로운 프레임 워크의 필요성을 정당화하지 않기 때문에 좋은 예는 아닙니다.

public class BaseView {
  protected UserLister userLister;

  public BaseView() {
    userLister = new UserListerDB(); // only line of code that needs changing
  }
}

public class SomeView extends BaseView {
  public SomeView() {
    super();
  }

  public void render() {
    List<User> users = userLister.getUsers();
    view.render(users);
  }
}

끝난! 따라서 수백 또는 수천 개의 뷰가 있더라도 Spring XML 접근 방식과 마찬가지로 여전히 한 줄의 코드 만 변경하면됩니다. 그러나 코드 줄을 바꾸려면 여전히 XML 편집과 달리 재 컴파일해야합니까? 내 까다로운 친구 야, 개미와 대본을 써라

그렇다면 Spring은 무엇입니까? 그것은 :

  1. 무리를 따르는 맹인 개발자
  2. Uni에서 그런 프레임 워크를 가르치지 않기 때문에 대학원 프로그래머를 고용하고 싶지 않은 고용주
  3. 나쁜 디자인으로 시작하여 패치 워크가 필요한 프로젝트 (빅터 휴고의 예에서 보듯이)

추가 자료 : http://discuss.joelonsoftware.com/?joel.3.219431.12


11
좌절은 제쳐두고, 나는 당신의 주장에 대해 궁금합니다. 나쁜 디자인을 만드는 데 사용할 수없는 프로그래밍 도구를 모르겠습니다. 당신이 목표로하는 것은 프레임 워크를 사용하면 나쁜 코드로 많은 일을 할 수 있다는 것입니다. 그것은 보편적으로 사실이며 Spring에만 국한되지 않습니다. 그렇지 않으면 요점이 뭐야? 유능한 개발자가 Spring이 제공하는 것, 특히 그들이 사용하는 프레임 워크의 도구를 잘 활용할 수 있다고 생각하지 않습니까? 적어도 스프링 개발자가 클래스 확장에 대해 들어 본 적이 없다는 것을 암시하지 않을 것이라고 확신합니다. 더 읽을 거리는 재미있다.
sthzg

2
또한 뷰에는 하나의 주입 된 서비스 ( UserLister) 만 필요하기 때문에 예제가 작동 하지만 여러 서비스가 필요한 경우 다른 자녀 와 공유하지 않는 경우 는 BaseView어떻습니까? Java에는 (다행히) 다중 상속이 없습니다.
에두아르 베르트

@EdouardBerthe 페어 포인트. 내 대답은 DI를 무시하려는 시도가 아니고, 단지 받아 들여진 대답에 표시된 예가 가장 크지 않다는 것을 지적합니다. 제안하는 시나리오가 가장 잘 작동합니다. 내가 실제로하려고했던 요점은 DI가 필요하지 않다는 것이 아니라 전체 프레임 워크가 필요하지 않다는 것입니다.
Ash

19

아주 간단히 요약하면 Spring은 응용 프로그램에서 "접착제"라고 말할 것입니다. 다른 프레임 워크와 사용자 고유의 코드를 통합하는 데 사용됩니다.


15

봄은 세 가지입니다.

  1. 스프링은 의존성 주입을 처리하고 의존성 주입에 대한 Martin Fowler의 훌륭한 소개를 읽는 것이 좋습니다.
  2. Spring이 두 번째로하는 일은 애플리케이션에서 사용하기에 매우 훌륭한 방식으로 우수한 Java 라이브러리를 래핑하는 것입니다. 좋은 예는 Spring이 어떻게 Task Executors와 Quartz Scheduler를 감싸는지를보십시오.
  3. 셋째, Spring은 REST, MVC 웹 프레임 워크 등과 같은 여러 가지 웹 구현을 제공합니다. 처음 두 가지에 Spring을 사용하고 있기 때문에 웹 응용 프로그램에 필요한 모든 것에 사용할 수 있습니다.

문제는 Spring DI가 실제로 잘 생각되고 다른 것들을 감싸는 래퍼는 다른 것들이 모든 것을 생각하고 Spring이 멋지게 감싸는다는 점에서 잘 생각된다는 것입니다. MVC와 REST의 스프링 구현과 다른 모든 것들이 잘 수행되지는 않지만 (YMMV, IMHO) 예외가 있습니다 (Spring Security는 다 폭탄입니다). 그래서 DI와 Spring에 멋진 래퍼를 사용하는 경향이 있지만 웹 (Tapestry를 많이 좋아함), REST (Jersey는 정말 강력합니다) 등의 다른 것들을 선호합니다.


9
YMMV, IMHO-마일리지가 다를 수 있습니다. 저와 같은 약어에 유창하지 않은 분들을위한 저의 겸손한 의견에 대한 답변
Sakamoto Kazuma

11

Spring을 사용하여 웹 애플리케이션에서 원하는 것-

  • 2.5 이상이 포함 된 Spring MVC를 사용하면 POJO를 컨트롤러 클래스로 사용할 수 있습니다. 즉 Struts 또는 Spring pre-2.5와 같이 특정 프레임 워크에서 확장 할 필요가 없습니다. 컨트롤러 클래스는 의존성 주입 덕분에 테스트하기가 간단합니다.
  • 해당 ORM 솔루션으로 작업을 단순화하는 Hibernate와의 스프링 통합 (대부분의 경우)
  • 웹 응용 프로그램에 Spring을 사용하면 모든 수준의 응용 프로그램에서 도메인 객체를 사용할 수 있습니다. Hibernate를 사용하여 매핑 된 동일한 클래스는 "양식 Bean"으로 사용하는 클래스입니다. 본질적으로 이것은 클래스 수를 줄이므로 부분적으로 더 강력한 도메인 모델로 이어질 것입니다.
  • 스프링 폼 태그를 사용하면 번거 로움없이 쉽게 폼을 만들 수 있습니다.

또한 Spring은 거대합니다. 따라서 Spring AOP 또는 Spring Security와 같은 웹 앱에서 사용하고 싶은 다른 것들이 많이 있습니다. 그러나 위에 나열된 4 가지 사항은 웹 앱에서 사용되는 Spring의 공통 구성 요소를 설명합니다.


9

이 부분에 두 부분이 있습니다.

  1. "Spring이란 정확히 무엇입니까?"-> victor hugo의 답변을 참조하십시오.
  2. "[...] Spring은 웹 개발을위한 훌륭한 프레임 워크입니다."-> 사람들은 이것이 Spring MVC에 대해 이야기하고 있다고 말합니다. Spring MVC는 Spring의 많은 부분 중 하나이며 의존성 주입과 같은 Spring의 일반적인 기능을 사용하는 웹 프레임 워크입니다. 매우 구성 가능한 점에서 꽤 일반적인 프레임 워크입니다. 다른 db 레이어 (Hibernate, iBatis, 일반 JDBC), 다른 뷰 레이어 (JSP, Velocity, Freemarker ...)를 사용할 수 있습니다

Spring MVC를 사용하지 않고도 웹 애플리케이션에서 Spring을 완벽하게 사용할 수 있습니다. Wicket, Struts, Seam 등과 같은 다른 웹 프레임 워크를 사용하면서 대부분의 Java 웹 응용 프로그램 이이 작업을 수행한다고 말합니다.


8

Spring은 클래스 인스턴스를 함께 붙이기에 좋습니다. 당신은 당신의 Hibernate 클래스들이 항상 데이터 소스를 필요로한다는 것을 알고있다.

데이터 액세스 객체는 항상 Hibernate 액세스가 필요합니다. Spring은 Hibernate 클래스를 DAO에 연결합니다.

또한 Spring은 기본적으로 여러 라이브러리의 견고한 구성을 제공하며, 그에 따라 사용할 라이브러리에 대한 지침을 제공합니다.

봄은 정말 훌륭한 도구입니다. (저는 기본 프레임 워크 인 Spring MVC에 대해 이야기하지 않았습니다).


5

Spring이 구성에 대한 다양한 주석을 지원하기 때문에 허용 된 답변에는 주석 사용법이 포함되지 않습니다.

스프링 (의존성 주입) 접근

XML 파일을 사용하여 클래스를 연결하는 또 다른 방법은 주석입니다. 이제 허용 대답에서 예제를 사용하자 주석 중 하나를 사용하여 클래스에서 직접 콩을 등록 @Component, @Service, @Repository또는를 @Configuration:

@Component
public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

이 방법으로 뷰를 만들면 마술처럼 UserLister를 사용할 수 있습니다.

위의 진술은 XML 파일 사용이 필요없고 @Autowired관련 구현을 찾아서 삽입하는 다른 주석과의 배선이 필요없는 약간의 보너스로 유효합니다 .

@Autowired
private UserLister userLister;

@BeanBean 구현을 주입하는 데 사용되는 메소드에 주석을 사용하십시오 .


잘못된. @Bean수업 수준 에서는 주석을 사용할 수 없습니다 . 중 하나 여야합니다 @Component, @Service, @Repository등 나머지 맞습니다. 이런 방식으로 인터페이스 자동 배선은 주입에 적합한 클래스 경로에 후보 클래스가 하나만있는 경우에만 작동하고 그렇지 않으면 스프링 애플리케이션 오류가 발생 함을 지적해야합니다.
Stefano L

@ 스테파노 : 네, 맞습니다. 사람들이 내 실수를 무시한 것 같아 의견 주셔서 감사합니다.
Nikolas

4

장점은 의존성 주입 (DI) 입니다. 객체 생성 작업을 아웃소싱하는 것을 의미합니다. 예를 들어 설명하겠습니다.

public interface Lunch
{
   public void eat();
}

public class Buffet implements Lunch
{
   public void eat()
   {
      // Eat as much as you can 
   }
}

public class Plated implements Lunch
{
   public void eat()
   {
      // Eat a limited portion
   }
}

이제 내 코드에는 다음과 같이 LunchDecide 클래스가 있습니다.

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(){
        this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
        //this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion 
    }
}

위의 클래스에서는 기분에 따라 Buffet () 또는 Plated ()를 선택합니다. 그러나이 시스템은 밀접하게 연결되어 있습니다. 다른 유형의 Object가 필요할 때마다 코드를 변경해야합니다. 이 경우 줄을 주석 처리하십시오! 50 명의 다른 사람들이 사용하는 50 개의 다른 클래스가 있다고 상상해보십시오. 엉망이 될 것입니다. 이 경우 시스템을 분리해야합니다. LunchDecide 클래스를 다시 작성해 봅시다.

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

new 키워드를 사용하여 객체를 만드는 대신 점심 유형의 객체에 대한 참조를 생성자에 매개 변수로 전달했습니다. 여기서는 객체 생성이 아웃소싱됩니다. 이 코드는 Xml 구성 파일 (레거시) 또는 Java 주석 (현대)을 사용하여 연결할 수 있습니다. 어느 쪽이든, 어떤 유형의 객체가 만들어 질지에 대한 결정은 런타임 중에 수행됩니다. Xml에 의해 코드에 객체가 주입됩니다. 코드는 해당 작업의 Xml에 의존합니다. 따라서 의존성 주입 (DI). DI는 시스템을 느슨하게 연결하는 데 도움이 될뿐만 아니라 종속성을 조롱 할 수 있기 때문에 단위 테스트 작성을 단순화합니다. 마지막으로 DI는 AOP (Aspect Oriented Programming)를 간소화하여 모듈의 추가 분리 및 증가로 이어집니다. 또한 위의 DI는 생성자 주입입니다.


그러나 Spring의 경우에도 여전히 콩을 정의 할 것입니다. 그리고 빈 ID는 코드에 주어질 것입니까? 내일 빈을 변경해도 여전히 코드를 변경해야합니까? 이점은 무엇입니까?
Arpan Buch

@ArpanBuch 스프링의 장점은 다른 구현이 이미 존재하는 한 코드를 다시 컴파일하지 않고 다른 구현을 선택할 수 있다는 것입니다. 나는 초보자이기 때문에 틀릴 수 있습니다.
byxor September

4
  • Spring은 J2EE에 비해 가볍고 유연한 프레임 워크입니다.
  • 스프링 컨테이너는 제어 역전으로 작동합니다.
  • Spring은 AOP, 즉 프록시와 Singleton, Factory 및 Template Method Design 패턴을 사용합니다.
  • 계층 구조 : 관심사 분리 및 재사용 가능한 계층 및 손쉬운 유지 관리.

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


1
Spring Framework help you with several things like, don't reinvent the wheel. you can connect very easily with some database just using Spring Data, or create schedule tasks like CronJob or Windows Task. amazing !
tomj0101

3

Spring은 EJB (Enterprise JavaBeans) 기술 의 좋은 대안 입니다. 또한 웹 프레임 워크 및 웹 서비스 프레임 워크 구성 요소가 있습니다.


1
정정 할 수 있습니까? 되었습니까 (끔찍한) EJB (2) (부분적으로 JPA 2 등) "새 EJB"수용 홈 가공 것 같다 대안. 스프링 부분 "일종의 EJB"의 "행복한 시간"은 지나간 것 같습니다. ad 2015
Jacek Cz

1

Spring은 매우 간단한 의존성 주입 시스템으로 시작했습니다. 이제는 거대하고 그 안에 모든 것이 있습니다 (잠정적 인 부엌 싱크대 제외).

그러나 걱정하지 마십시오. 모듈 식이므로 원하는 조각 만 사용할 수 있습니다.

모든 것이 시작된 곳을 보려면 :

http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=sr_1_1?ie=UTF8&s=books&qid=1246374863&sr=1-1

오래되었지만 훌륭한 책입니다.

이번에 스프링에 전념 한 또 다른 좋은 책은 다음을 참조하십시오.

http://www.amazon.com/Professional-Java-Development-Spring-Framework/dp/0764574833/ref=sr_1_2?ie=UTF8&s=books&qid=1246374863&sr=1-2

또한 이전 버전의 Spring을 참조하지만 확실히 볼 가치가 있습니다.


1

Spring은 처음에는 의존성 주입이었고 거의 모든 것 (JPA 구현에 대한 래퍼)에 래퍼 킹을 추가했습니다.

긴 이야기 ... Spring preffer XML 솔루션 (XML 스크립팅 엔진 ... brrrr)의 대부분은 DI이므로 Guice를 사용합니다.

좋은 라이브러리이지만 점점 커지는 depnedenciec와 함께 Spring JDBC (실제 이름 매개 변수가있는 Java jdbc 솔루션 일 수 있음)는 다음 4-5에서 가져옵니다.

웹 개발을 위해 Spring MVC ( "빅 스프링"의 일부)를 사용합니다 ... "요청 기반"프레임 워크입니다. "요청 대 컴포넌트"라는 거룩한 전쟁이 있습니다 ...


1
스프링 프레임 워크가 XML에서 주석 및 Java 구성으로 이동하려고한다고 생각합니다.
Maksim

0

과거에는 순수한 기술적 관점에서 스프링 프레임 워크에 대해 생각했습니다.

팀 작업 경험과 엔터프라이즈 웹 애플리케이션 개발 경험을 감안할 때 Spring은 개별 요소 (빈)를 분리 하여 애플리케이션 (웹 애플리케이션) 을 더 빠르게 개발 하기위한 입니다. 개발 속도가 빠르면 인기가 높아집니다. Spring은 애플리케이션을 Spring 프레임 워크에 빌드 (배선)하는 책임을 바꿉니다. 스프링 프레임 워크의 의존성 주입 은 개별 빈을 작동하는 애플리케이션에 연결 / 배선하는 역할을한다.

이런 식으로 개발자는 Bean 간의 인터페이스가 정의되는 즉시 개별 컴포넌트 (beans) 개발에 더 집중할 수 있습니다.

이러한 응용 프로그램의 테스트는 쉽습니다. 개별 빈에 중점을 둡니다. 쉽게 분리하고 조롱 할 수 있으므로 단위 테스트가 빠르고 효율적입니다.

Spring 프레임 워크는 웹 목적을 제공하기 위해 @Controller ( @Restcontroller ), @Repository , @Component 와 같은 여러 특수화 된 Bean을 정의 합니다. Maven과 함께 Spring은 개발자에게 직관적 인 구조를 제공합니다. 개별 요소가 분리되어 재사용 될 수 있으므로 팀 작업이 쉽고 빠릅니다.


0

스프링 프레임 워크는 웹 개발에 적합하고 편안한 API 서비스에 더 구체적입니다.

스프링 보안 , 스프링 aop , mvc 프레임 워크 , 마이크로 서비스 와 같은 다른 모듈과 의 의존성 주입 및 통합으로 인해 위의 이점에 적합합니다.

모든 응용 프로그램에서 보안은 아마도 요구 사항 일 것입니다.
긴 유지 관리가 필요한 제품을 구축하려는 경우 Aop 개념을 활용해야합니다.

애플리케이션에 많은 트래픽이 발생하여로드가 증가하는 경우 마이크로 서비스 개념을 사용해야합니다.

Spring은 이러한 모든 기능을 하나의 플랫폼에서 제공합니다. 많은 모듈을 지원 합니다 .
가장 중요한 것은 스프링은 오픈 소스 이며 확장 가능한 프레임 워크이며, 라이프 사이클에서 커스텀 코드를 통합 할 수있는 곳이라면 어디든지 갈고리가 있습니다.

Spring Data 는 프로젝트와의 통합을 제공하는 하나의 프로젝트입니다.


따라서 스프링은 거의 모든 요구 사항에 적합합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.