sourcecode

Spring Framework의 용도는 무엇입니까?

copyscript 2022. 8. 21. 19:52
반응형

Spring Framework의 용도는 무엇입니까?

나는 스프링에 대해 많이 듣는데, 사람들은 스프링이 웹 개발에 좋은 프레임워크라고 웹을 통해 말하고 있다.Spring Framework가 정확히 무엇을 위한 것일까요?왜 평범한 자바에서 사용해야 하죠?

기본적으로 스프링은 매우 분리된 시스템을 구축할 수 있는 패턴인 주입을 위한 프레임워크입니다.

문제

를 들어,하고, 「」, 「」, 「」라고 하는 할 필요가 합니다.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에 의해 인스턴스화 및 초기화되어 적절한 장소에 주입됩니다(Servlets, Web Frameworks, Business Class, DAO 등).

, .userListerXML을 사용하다

<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

대단해!아니니?

  • 인터페이스의 다른 실장을 사용하는 경우는 어떻게 해야 합니까?XML을 변경하기만 하면 됩니다.
  • 도입 준비가 되어 있지 않으면 어떻게 됩니까?의 일시적 모의 구현을 프로그래밍한다.UserLister뷰의 전개를 용이하게 합니다.
  • 내가 더 이상 봄을 쓰고 싶지 않다면?그냥 쓰지 마세요!응용 프로그램이 연결되어 있지 않습니다.제어의 반전: "애플리케이션이 프레임워크를 제어하는 것이지 프레임워크가 애플리케이션을 제어하는 것은 아닙니다."

이 밖에도 의존성 주입을 위한 옵션이 몇 가지 있습니다.심플함, 우아함, 안정성 외에도 Spring Source의 직원들은 Spring을 다른 많은 공통 프레임워크와 통합할 수 있도록 많은 POJO를 프로그래밍했습니다.또한 Spring에는 Spring MVC, Spring WebFlow, Spring Security 등의 좋은 서브프로젝트가 몇 개 있고, 또한 Loooong 목록도 있습니다.

이게 도움이 됐으면 좋겠다.어쨌든 마틴 파울러의 '의존성 주입과 통제의 반전'에 대한 기사를 읽어보시길 권합니다. 왜냐하면 그는 나보다 더 잘하기 때문입니다.기본을 이해한 후에 봄 문서보면, 제가 생각하기에 그것은 최고의 봄 입니다.

에는 (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;
}

Trip을 원할 때마다, 때로는 4휠을 초기화할 SUV를 원할 수도 있고, 때로는 Sedan을 원할 수도 있습니다.그것은 정말 구체적인 상황에 따라 당신이 무엇을 원하는지에 달려있다.

이 문제를 해결하려면 공장 패턴을 크레디컬 패턴으로 만들어야 합니다.공장에서 올바른 인스턴스를 반환합니다.따라서 결국에는 오브젝트를 올바르게 인스턴스화하기 위해 많은 글루 코드를 사용하게 됩니다.스프링은 접착 코드 없이 접착 코드를 사용하는 것이 가장 좋습니다.XML에서 매핑을 선언하면 개체가 자동으로 초기화됩니다.또, instance에 싱글톤 아키텍처를 사용하는 것으로, 메모리 사용의 최적화에 도움이 됩니다.

이를 제어의 반전이라고도 합니다.이를 위한 다른 프레임워크로는 Google guice, Pico container 등이 있습니다.

이와 별도로 Spring은 검증 프레임워크와 JDBC, iBatis 및 Hibernate(및 기타 다수)와 협력하여 DAO 계층을 광범위하게 지원합니다.데이터베이스 트랜잭션에 대한 뛰어난 트랜잭션 제어 기능을 제공합니다.

봄에는 "프로 스프링"과 같은 좋은 책에서 읽을 수 있는 것이 훨씬 더 많다.

도음 URL 도도 URL 。
http://static.springframework.org/docs/Spring-MVC-step-by-step/httpstatic.springframework.org/docs//
http://en.wikipedia.org/wiki/Spring_Frameworkhttpen.wikipedia.org/wiki/
http://www.theserverside.com/tt/articles/article.tss?l=SpringFrameworkhttpwww.theserverside.com/tt/articles/article.tss?l=

옛날에는 스프링이 (Guice, PicoContainer 등)와 같은 종속성 주입 프레임이었지만, 현재는 엔터프라이즈 애플리케이션을 구축하기 위한 토탈 솔루션입니다.

물론 봄의 심장인 봄의존주사는 아직 있지만(다른 좋은 답변은 이쪽에서 확인할 수 있습니다), 봄에는 더 많은 것이 있습니다.

봄에는 많은 프로젝트가 있으며, 각 프로젝트마다 하위 프로그램(http://spring.io/projects))이 있습니다.누군가가 봄에 대해 말할 때, 여러분은 그가 말하는 봄 프로젝트가 무엇인지 알아내야 한다. 의 골격으로 알려진 봄의 핵심이 그것인지 아니면 또 다른 봄의 프로젝트인지.

봄철 프로젝트 중 언급할 가치가 있는 것은 다음과 같은 것이 있습니다.

사용하시는 어플리케이션의 지정 기능이 더 필요한 경우는, 다음의 URL 로도 입수할 수 있습니다.

  • Spring Batch Framework의 개발은
    어플리케이션
  • 봄철 HATEOAS 원금을 기반으로 REST API를 쉽게 만들 수 있습니다.
  • 모바일 애플리케이션 개발을 위한 Spring Mobile 및 Spring Andriod
  • Spring Shell은 풀기능 셸(명령줄) 어플리케이션을 구축합니다.
  • 클라우드 애플리케이션을 위한 Spring Cloud 및 Spring Cloud 데이터 흐름

또한 스프링 소셜 미디어(http://projects.spring.io/spring-social-facebook/) 등)와 같은 소규모 프로젝트도 있습니다.

은 '봄'이 웹 할 수 . 왜냐하면 스프링은Spring MVCSpring Framework 프로젝트의 일부인 모듈입니다.또는 struts2와 같은 다른 웹 프레임워크와 함께 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을 편집하는 것이 아니라 다시 컴파일해야 합니다.글쎄, 까다로운 친구여, 개미를 이용해서 대본이나 써라!

그렇다면 봄은 무엇을 위한 것일까요?용도는 다음과 같습니다.

  1. 무리를 따르는 맹목적인 개발자
  2. Uni에서 이러한 프레임워크를 가르치지 않기 때문에 대학원 프로그래머를 채용하고 싶지 않은 고용주
  3. 잘못된 설계로 시작되어 패치 작업이 필요한 프로젝트(승리자의 예에서 알 수 있음)

자세한 내용은 http://discuss.joelonsoftware.com/ ?joel 3 . 219431 . 12

요약하자면, 봄은 당신의 지원서의 '글루'라고 하겠습니다.다른 프레임워크와 코드를 통합하기 위해 사용됩니다.

봄은 세 가지입니다.

  1. Spring hands Dependency Injection과 Martin Fowler의 Dependency Injection에 대한 훌륭한 소개를 읽어보시길 권합니다.
  2. Spring이 하는 두 번째 일은 뛰어난 Java 라이브러리를 어플리케이션에서 매우 우아하게 사용하는 것입니다.좋은 예시는 스프링이 태스크 실행자와 쿼츠 스케줄러를 랩하는 방법을 참조하십시오.
  3. 세 번째 스프링은 REST, MVC 웹 프레임워크 등과 같은 다양한 웹 구현 기능을 제공합니다.Spring을 처음 두 번 사용하므로 웹 앱이 필요로 하는 모든 것에 사용할 수 있을 것이라고 그들은 생각합니다.

문제는 스프링 DI는 정말 잘 고안되어 있고, 다른 것들의 포장지는 정말 잘 고안되어 있다는 것입니다. 그리고 스프링은 모든 것을 잘 포장하고 있다는 것입니다.MVC 및 REST 및 기타 모든 기능의 스프링 구현은 제대로 수행되지 않았지만(YMMV, IMHO) 예외가 있습니다(스프링 보안은 매우 중요합니다).그래서 나는 DI에 스프링을 사용하고, 그 시원한 포장지를 사용하는 경향이 있지만, 웹에는 다른 것을 선호한다(Tapestry를 매우 좋아한다), REST(Jersey는 매우 튼튼하다).

Spring의 웹 어플리케이션에서 원하는 것 -

  • Spring MVC: 2.5+에서는 POJO를 컨트롤러 클래스로 사용할 수 있습니다.즉, Struts나 Spring 2.5 이전과 같이 특정 프레임워크에서 확장할 필요가 없습니다.컨트롤러 클래스도 의존성 주입으로 테스트가 매우 간단함
  • 하이버네이트와의 스프링 통합으로 해당 ORM 솔루션(대부분의 경우)으로 작업을 심플화
  • 웹 앱에 Spring을 사용하면 응용 프로그램의 모든 수준에서 도메인 개체를 사용할 수 있습니다. Hibernate를 사용하여 매핑된 클래스는 "폼 콩"으로 사용하는 클래스입니다.이는 본질적으로 보다 견고한 도메인 모델로 이어집니다.부분적으로는 클래스 수를 줄일 수 있기 때문입니다.
  • 스프링 폼 태그로 번거로움 없이 폼을 쉽게 만들 수 있습니다.

게다가 Spring은 거대하기 때문에 Spring AOP나 Spring Security와 같은 웹 앱에서 사용하고 싶은 다른 많은 것들이 있습니다.그러나 위의 4가지 항목은 웹 앱에서 사용되는 스프링의 일반적인 구성 요소를 설명합니다.

여기에는 두 가지 부분이 있습니다.

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

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

봄은 수업의 예를 함께 붙이기에 좋습니다.Hibernate 클래스는 항상 데이터 소스가 필요하며 Spring은 데이터 소스를 함께 배선합니다(데이터 소스도 구현되어 있습니다).

데이터 액세스 오브젝트에는 항상 휴지 상태 액세스가 필요합니다.Spring은 DAO에 휴지 상태 클래스를 연결합니다.

또한 Spring은 기본적으로 여러 라이브러리의 견고한 구성을 제공하며, 이 구성에서는 어떤 lib를 사용해야 하는지에 대한 지침을 제공합니다.

봄은 정말 좋은 도구입니다.(스프링 MVC가 아니라 기본 프레임워크에 대해서만 이야기한 것입니다).

장점은 의존성 주입(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 
    }
}

위의 수업에서는 기분에 따라 뷔페() 또는 플레이티드()를 선택합니다.그러나 이 시스템은 밀접하게 연결되어 있습니다.다른 유형의 객체가 필요할 때마다 코드를 변경해야 합니다.이 경우, 코멘트 아웃! 50명의 다른 사람들이 사용하는 50개의 클래스가 있다고 상상해 보세요.정말 엉망진창이 될 거야이 경우 시스템을 분리해야 합니다.LunchDecide 클래스를 다시 작성합시다.

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

새로운 키워드를 사용하여 오브젝트를 작성하는 대신 런치타입 오브젝트에 대한 참조를 파라미터로 컨스트럭터에 전달했습니다.여기서 오브젝트 작성은 아웃소싱됩니다.이 코드는 Xml 구성 파일(레거시) 또는 Java 주석(현대)을 사용하여 배선할 수 있습니다.어느 쪽이든 어떤 유형의 오브젝트가 생성될지는 런타임 중에 결정됩니다.오브젝트는 Xml에 의해 우리의 코드에 삽입됩니다.우리의 코드는 그 작업에 Xml에 의존합니다.따라서 의존성 주입(DI). DI는 시스템을 느슨하게 결합하는 데 도움이 될 뿐만 아니라 의존성을 조롱할 수 있기 때문에 유닛 테스트 작성을 단순화합니다.마지막으로, DI는 AOP(Aspect Oriented Programming)를 합리화하여 모듈성을 더욱 분리 및 증가시킵니다.또한 위의 DI는 컨스트럭터 주입입니다.DI는 캡슐화의 플레인 올드 세터 방식과 마찬가지로 Setter Injection으로 수행할 수 있습니다.

Spring이 구성을 위한 다양한 주석을 지원하게 된 이후 승인된 답변은 주석 사용과 관련이 없습니다.

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

XML 파일을 사용하여 클래스를 배선하는 다른 방법인 주석도 있습니다. 합격 해서 한 개의 해 보겠습니다.@Component,@Service,@Repository ★★★★★★★★★★★★★★★★★」@Configuration:

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

이렇게 하면 뷰가 작성될 때 마법처럼 UserLister를 사용할 수 있게 됩니다.

및 이 필요 합니다.@Autowired적절한 구현을 찾아 주입합니다.

@Autowired
private UserLister userLister;

하다를 사용하세요.@Bean콩을 주입하는 데 사용되는 방법에 대한 주석입니다.

  • 스프링은 J2EE에 비해 가볍고 유연한 프레임워크입니다.
  • 스프링 용기는 제어의 반전 역할을 합니다.
  • 스프링은 프록시와 싱글턴, 공장 및 템플릿 방법 설계 패턴을 사용합니다.
  • 계층형 아키텍처:문제의 분리, 재사용 가능한 레이어 및 손쉬운 유지보수가 가능합니다.

여기에 이미지 설명 입력

봄은 Enterprise JavaBeans(EJB) 기술을 대체하는 좋은 방법입니다.또한 웹 프레임워크와 웹 서비스 프레임워크 구성 요소도 있습니다.

스프링은 상당히 단순한 의존성 주입 시스템으로 시작되었습니다.이제 그것은 크고 그 안에 모든 것을 가지고 있다(속담에 있는 부엌 싱크대를 제외하고.

하지만 걱정 마세요. 모듈러형이기 때문에 원하는 부분만 사용할 수 있습니다.

이 모든 것이 어디서 시작되었는지 알아보려면:

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

오래된 버전의 봄도 언급하고 있지만 볼만합니다.

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

긴 이야기... 봄철 XML 솔루션(XML 스크립트 엔진... brrrr)의 대부분은 Guice를 사용합니다.

라이브러리는 좋지만, 디페니덴시크가 증가함에 따라, 예를 들어 Spring JDBC(실명 파라미터가 있는 Java jdbc 솔루션 중 하나)는 다음 maven 4-5에서 가져옵니다.

Spring MVC('빅 스프링'의 일부)를 사용하여 웹을 개발...그것은 "요구에 근거한" 프레임워크이며, 성전 "요구와 컴포넌트"가 존재한다.너한테 달렸어

과거에는 순전히 기술적인 관점에서 스프링 프레임워크에 대해 생각했다.

팀워크와 엔터프라이즈 웹앱 개발 경험으로 볼 때 봄은 개별 요소(빈)를 분리하여 애플리케이션(웹 애플리케이션)을 보다 빠르게 개발하는 것이라고 생각합니다.개발 속도가 빠르면 인기가 높아집니다.스프링을 사용하면 애플리케이션을 스프링 프레임워크로 빌드(배선)하는 책임을 이전할 수 있습니다.스프링 프레임워크의 의존성 주입은 개별 콩을 작동 애플리케이션에 연결/배선하는 역할을 합니다.

이렇게 하면 개발자는 콩 간의 인터페이스가 정의되는 즉시 개별 컴포넌트(콩) 개발에 더욱 집중할 수 있습니다.

이러한 어플리케이션의 테스트는 간단합니다.주요 초점은 개별 콩입니다.쉽게 분리하여 조롱할 수 있으므로 유닛 테스트가 빠르고 효율적입니다.

Spring 프레임워크에서는 @Controller(@Restcontroller), @Repository, @Component 등 여러 개의 전용 콩을 정의하고 있습니다.Maven과 함께 하는 스프링은 개발자들에게 직관적인 구조를 제공합니다.개별적인 요소가 있어 팀워크가 쉽고 빠르게 진행되며 재사용이 가능합니다.

Spring Framework는 웹 개발 및 보다 구체적인 휴식 API 서비스에 매우 적합합니다.

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

모든 애플리케이션에서 보안은 대부분의 경우 필수 조건입니다.
장기 유지보수가 필요한 제품을 구축하려면 Aop 개념을 활용해야 합니다.

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

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

스프링 데이터는 프로젝트와의 통합을 제공하는 프로젝트 중 하나입니다.


그래서 봄은 거의 모든 요건에 들어맞습니다.

언급URL : https://stackoverflow.com/questions/1061717/what-exactly-is-spring-framework-for

반응형