복붙노트

[SPRING] 스프링 프레임 워크는 정확히 무엇입니까? [닫은]

SPRING

스프링 프레임 워크는 정확히 무엇입니까? [닫은]

봄에 대해 많이 들었습니다. 사람들은 웹에서 스프링이 웹 개발을위한 훌륭한 프레임 워크라고 말합니다. 스프링 프레임 워크는 정확히 무엇입니까?

해결법

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

    1.기본적으로 스프링은 의존성 (dependency-injection)을위한 프레임 워크로서 매우 분리 된 시스템을 구축 할 수있는 패턴입니다.

    기본적으로 스프링은 의존성 (dependency-injection)을위한 프레임 워크로서 매우 분리 된 시스템을 구축 할 수있는 패턴입니다.

    예를 들어 시스템 사용자를 나열하고 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
    

    대단해! 그렇지 않니?

    Dependency Injection을위한 몇 가지 다른 옵션이 있습니다. SpringSource의 사람들이 Spring을 다른 많은 공통 프레임 워크와 통합하는 데 도움이되는 많은 POJO를 프로그래밍했기 때문에, 내 생각으로는 Spring이 단순함, 우아함 및 안정성 외에도 유명해졌습니다. 귀하의 응용 프로그램에 관입. 또한 Spring에는 Spring MVC, Spring WebFlow, Spring Security 및 기타 등등과 같은 몇 가지 좋은 하위 프로젝트가있다.

    희망이 도움이됩니다. 어쨌든 Martin Fowler의 Dependency Injection과 Inversion of Control에 대한 기사는 그가 나보다 잘하기 때문에 읽어 보시기 바랍니다. 기본 지식을 이해 한 후에 Spring Documentation을 살펴 보시라. 제 의견으로는 Spring Book 중에서 가장 좋은 책이었습니다.

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

    2.Spring은 (Skaffman이 지적한대로) MVC 프레임 워크를 포함합니다. 짧은 설명은 여기에 있습니다. Spring은 서비스 계층, 웹 계층 및 비즈니스 계층의 분리를 지원하지만 실제로 가장 좋은 것은 객체의 "주입"입니다. 예를 들어 아래 예제를 고려해 보겠습니다.

    Spring은 (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;
    }
    

    이제 여행의 인스턴스를 원할 때마다; 때로는 FourWheel을 초기화하기 위해 SUV를 원하거나 때로는 세단을 원할 수도 있습니다. 그것은 정말로 당신이 원하는 상황에 따라 달라집니다.

    이 문제를 해결하려면 Factory Pattern을 생성 패턴으로 사용하고 싶을 것입니다. 공장이 올바른 인스턴스를 반환하는 곳. 그래서 결국 객체를 올바르게 인스턴스화하기위한 많은 글루 코드로 끝날 것입니다. Spring은 접착제 코드없이 최고의 접착제 코드 작업을 수행합니다. XML로 매핑을 선언하면 객체가 자동으로 초기화됩니다. 또한 인스턴스에 싱글 톤 아키텍처를 사용하여 많은 작업을 수행하므로 최적화 된 메모리 사용에 도움이됩니다.

    이것은 제어 반전이라고도합니다. 이 작업을 수행하는 다른 프레임 워크는 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

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

    3.옛날, 봄은 (Guice, PicoContainer, ...)와 같은 의존성 사출 프레임 작업 이었지만 지금은 엔터프라이즈 애플리케이션을 구축하기위한 토탈 솔루션입니다.

    옛날, 봄은 (Guice, PicoContainer, ...)와 같은 의존성 사출 프레임 작업 이었지만 지금은 엔터프라이즈 애플리케이션을 구축하기위한 토탈 솔루션입니다.

    물론 스프링의 핵심 인 스프링 의존성 주입 (spring dependency injection)은 여전히 ​​존재하지만 (여기 다른 좋은 해답을 검토 할 수 있습니다.), 봄부터 더 많이 있습니다 ....

    Spring은 많은 프로젝트를 가지고 있으며 각각은 몇 가지 하위 프로젝트 (http://spring.io/projects)를 가지고있다. 어떤 사람이 봄에 관해 말하면, 그가 말하는 봄 프로젝트가 무엇인지 알아 내야합니다. 봄철 프레임 워크로 알려진 스프링 코어 일 뿐이며, 또 다른 봄 프로젝트입니다.

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

    애플리케이션에 더 많은 기능을 지정해야하는 경우, 해당 기능도 있습니다.

    거기에는 스프링 - 사회 - 페이스 북 (http://projects.spring.io/spring-social-facebook/)과 같은 작은 프로젝트도 있습니다.

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

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

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

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

    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);
      }
    }
    

    끝난! 이제 수백 또는 수천 개의 뷰가 있더라도 스프링 XML 접근 방식과 같이 한 줄의 코드 만 변경하면됩니다. 하지만 XML을 편집하는 것과는 대조적으로 코드 줄을 변경하려면 다시 컴파일해야합니다. 잘 생긴 내 친구, 개미와 스크립트를 써라.

    그렇다면 봄은 무엇입니까? 그것을위한 :

    추가 읽기 : http://discuss.joelonsoftware.com/?joel.3.219431.12

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

    5.요약하면 Spring은 애플리케이션에서 "접착제"라고 말할 것입니다. 그것은 다른 프레임 워크와 자신의 코드를 통합하는 데 사용됩니다.

    요약하면 Spring은 애플리케이션에서 "접착제"라고 말할 것입니다. 그것은 다른 프레임 워크와 자신의 코드를 통합하는 데 사용됩니다.

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

    6.봄은 세 가지입니다.

    봄은 세 가지입니다.

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

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

    7.Spring을 사용하여 웹 애플리케이션에서 원하는 기능 -

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

    또한 Spring은 거대하다. Spring AOP 나 Spring Security와 같은 웹 애플리케이션에서 사용하고자하는 것들이 많이있다. 그러나 위에 나열된 네 가지 사항은 웹 응용 프로그램에서 사용되는 Spring의 공통 구성 요소를 설명합니다.

  8. ==============================

    8.나는이 두 부분을 본다.

    나는이 두 부분을 본다.

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

  9. ==============================

    9.Spring은 클래스의 인스턴스를 함께 붙이는 데 적합합니다. 당신은 당신의 Hibernate 클래스들이 항상 데이터 소스를 필요로한다는 것을 알고있다. Spring은 그것들을 함께 연결한다 (그리고 데이터 소스의 구현도 가지고있다).

    Spring은 클래스의 인스턴스를 함께 붙이는 데 적합합니다. 당신은 당신의 Hibernate 클래스들이 항상 데이터 소스를 필요로한다는 것을 알고있다. Spring은 그것들을 함께 연결한다 (그리고 데이터 소스의 구현도 가지고있다).

    데이터 접근 객체는 항상 Hibernate 접근을 요구할 것이고, Spring은 Hibernate 클래스들을 DAO들로 연결 시켜줄 것이다.

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

    봄은 정말 훌륭한 도구입니다. (나는 스프링 MVC에 대해 말하지 않고 단지 기본 프레임 워크였다.)

  10. ==============================

    10.Spring은 설정을위한 다양한 주석에 대한 지원을 도입 한 이후로 허용 된 대답은 주석 사용을 포함하지 않습니다.

    Spring은 설정을위한 다양한 주석에 대한 지원을 도입 한 이후로 허용 된 대답은 주석 사용을 포함하지 않습니다.

    XML 파일을 사용하여 클래스를 연결하는 또 다른 방법은 주석입니다. @Component, @Service, @Repository 또는 @Configuration 중 하나를 사용하여 허용 된 답변의 예제를 사용하고 클래스에 직접 Bean을 등록합니다.

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

    위의 선언문은 XML 파일 사용 및 외부 구현 @Autowired 주석이 필요없는 작은 보너스로 유효합니다. @Autowired는 관련 구현을 찾아서 삽입합니다.

    @Autowired
    private UserLister userLister;
    

    Bean 구현을 가져 오는 데 사용되는 메소드에서 @Bean 어노테이션을 사용하십시오.

  11. ==============================

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

    이점은 의존성 주입 (Dependency Injection, 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 키워드를 사용하여 객체를 생성하는 대신 Lunch Type의 객체에 대한 참조를 생성자의 매개 변수로 전달했습니다. 여기서 개체 생성은 아웃소싱됩니다. 이 코드는 Xml 구성 파일 (레거시) 또는 Java 어노테이션 (최신)을 사용하여 연결할 수 있습니다. 어느 쪽이든, 어떤 유형의 객체가 생성 될지에 대한 결정은 런타임 중에 수행됩니다. 객체는 Xml에 의해 우리 코드에 주입 될 것입니다 - 우리 코드는 해당 작업에 대한 Xml에 의존합니다. 따라서 의존성 주입 (Dependency Injection, DI). DI는 시스템을 느슨하게 결합하는 데 도움이 될뿐만 아니라 종속성을 조롱 할 수 있으므로 Unit 테스트 작성을 단순화합니다. 마지막으로, DI는 AOP (Aspect Oriented Programming)를 간소화하여 모듈화를 더욱 강화하고 결합을 증가시킵니다. 또한 위의 DI는 생성자 삽입입니다. DI는 Setter Injection에 의해서도 캡슐화와 같은 평범한 오래된 setter 메소드로 수행 될 수 있습니다.

  12. ==============================

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

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

  13. ==============================

    13.Spring은 비교적 간단한 의존성 주입 시스템으로 시작되었습니다. 이제 그것은 거대하고 모든 것을 가지고 있습니다 (속담 주방 싱크 제외).

    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을 참조하지만, 확실히 살펴볼 가치가 있습니다.

  14. ==============================

    14.Spring은 처음에는 의존성 주입이었고, 거의 모든 것을 위해 wrapper의 왕을 추가했다 (JPA 구현물에 대한 wrapper).

    Spring은 처음에는 의존성 주입이었고, 거의 모든 것을 위해 wrapper의 왕을 추가했다 (JPA 구현물에 대한 wrapper).

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

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

    웹 개발을위한 Spring MVC ( "큰 봄"의 일부) 사용하기 ... 요청 기반의 프레임 워크입니다. 거룩한 전쟁 "요청 대 구성 요소"가 있습니다.

  15. ==============================

    15.

  16. ==============================

    16.스프링 프레임 워크는 Rest API에 더 특화된 웹 개발에 도전적으로 좋다. 스프링 보안, 스프링 에이프, MVC 프레임 워크, 마이크로 서비스와 같은 다른 모듈과의 의존성 삽입 및 통합 때문입니다.

    스프링 프레임 워크는 Rest API에 더 특화된 웹 개발에 도전적으로 좋다. 스프링 보안, 스프링 에이프, MVC 프레임 워크, 마이크로 서비스와 같은 다른 모듈과의 의존성 삽입 및 통합 때문입니다.

    확실히 구축해야하는 애플리케이션에는 보안이 필요합니다. 제품을 만들고 장기간 유지 보수를한다면 Aop 개념이 맹렬히 필요합니다. 응용 프로그램에 훨씬 많은로드가 있으면 마이크로 서비스를 구현해야합니다.

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

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

    따라서 응용 프로그램을 작성하는 데 필요한 모든 것이 Spring입니다.

  17. ==============================

    17.과거에는 순수하게 기술적 관점에서 Spring 프레임 워크를 생각했습니다.

    과거에는 순수하게 기술적 관점에서 Spring 프레임 워크를 생각했습니다.

    팀 작업 경험과 엔터프라이즈 웹 애플리케이션 개발을 감안할 때 Spring은 개별 요소 (빈)를 분리하여 애플리케이션 (웹 애플리케이션)을보다 빨리 개발할 수 있다고 말하고 싶다. 빠른 개발로 인기가 있습니다. Spring은 응용 프로그램을 Spring 프레임 워크에 빌드 (와이어 링)하는 책임을 변경할 수있게합니다. Spring 프레임 워크의 의존성 삽입은 개별 빈을 작동중인 애플리케이션으로 연결 / 연결하는 역할을 담당한다.

    이 방법을 사용하면 개발자는 빈 간의 인터페이스가 정의되는 즉시 개별 구성 요소 (빈) 개발에 더욱 집중할 수 있습니다.

    이러한 응용 프로그램을 테스트하는 것은 쉽습니다. 주된 초점은 개별 콩에 주어집니다. 그것들은 쉽게 분리되고 조롱 될 수 있으므로 단위 테스트가 빠르고 효율적입니다.

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

  18. from https://stackoverflow.com/questions/1061717/what-exactly-is-spring-framework-for by cc-by-sa and MIT license