Para que serve exactamente o quadro da Primavera? [fechado]

ouço muito sobrePrimavera , as pessoas estão dizendo por toda a web que a primavera é um bom quadro para o desenvolvimento da web. Para que serve exactamente o quadro da Primavera?

Author: xxxxxxxxxxx, 2009-06-30

17 answers

Basicamente a primavera é um quadro para dependency-injection que é um padrão que permite construir sistemas muito dissociados.

O problema

Por exemplo, suponha que você precisa listar os usuários do sistema e, assim, declarar uma interface chamada UserLister:

public interface UserLister {
    List<User> getUsers();
}
E talvez uma implementação a aceder a uma base de dados para obter todos os utilizadores.
public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}
Na sua opinião, terá de aceder a uma instância (apenas um exemplo), lembre-se:
public class SomeView {
    private UserLister userLister;

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

Note que o código acima não inicializou a variável userLister. O que devemos fazer? Se eu explicitamente instanciar o objeto assim:

UserLister userLister = new UserListerDB();

...Eu juntaria a minha visão com a minha implementação da classe que acede ao DB. E se eu quiser mudar da implementação DB para outra que obtém a lista de Usuários de um arquivo separado por vírgulas (lembre-se, é um exemplo)? Nesse caso, eu iria ao meu código novamente e mudaria a última linha por:

UserLister userLister = new UserListerCommaSeparatedFile();
Isto não tem problema com um pequeno programa como este, mas ... .. O que acontece em um programa que tem centenas de visualizações e um número similar de classes de Negócio. A manutenção Torna-se um pesadelo!

Abordagem da Primavera (Injecção de Dependência)

O que a mola faz é ao wire As classes acima usando um ficheiro XML ou anotações, desta forma todos os objectos são instanciados e inicializados pela mola e injectados nos locais certos (Servlets, Web Frameworks, Business classes, DAOs, etc, etc, etc...).

Voltando ao exemplo na primavera, só precisamos de ter um setter para o campo userLister e ter um ficheiro XML como este:

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

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>
Ou mais simplesmente anotar o arquivado na nossa classe de visão com @Inject:
@Inject
private UserLister userLister;

Assim, quando a vista for criada, ela magicamente terá um UserLister Pronto para funcionar.

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code
É fantástico! Não é?
  • e se quiseres usar outro implementação da sua interface UserLister? muda apenas o XML
  • E se não tiver uma implementação pronta? Programe uma implementação temporal simulada de {[8] } e facilite o desenvolvimento da visão
  • E se eu já não quiser usar a Primavera?Não o uses! A tua candidatura não está associada a ela. inversão do controlo afirma: "a aplicação controla o enquadramento, e não o enquadramento controla a aplicacao".

Há algumas outras opções para injeção de dependência por aí, o que, na minha opinião, tornou a primavera tão famosa, além da sua simplicidade, elegância e estabilidade, é que os tipos da SpringSource programaram muitos POJOs que ajudam a integrar a primavera com muitos outros quadros comuns sem serem intrusivos na sua aplicação. Além disso, a primavera tem vários subprojectos bons, como o MVC da Primavera, o WebFlow da primavera, a segurança da primavera e, mais uma vez, uma lista looong de etceteras.

Espero que isto ajude. De qualquer forma, encorajo-te a ler o artigo do Martin Fowler sobre a injecção de dependência e inversão do controlo, porque ele faz melhor do que eu. Depois de compreender o básico, dê uma vista de olhos à documentação da Primavera., na minha opinião, é era o melhor livro de Primavera de sempre.
 624
Author: victor hugo, 2018-06-22 00:44:24

A Primavera contém (Como a Skaffman correctamente salientou ), um enquadramento da MVC. Para explicar em resumo, aqui estão as minhas entradas. A primavera apoia a segregação da camada de serviço, da camada web e da camada de negócio, mas o que realmente faz melhor é "injeção" de objetos. Então para explicar que com um exemplo considere o exemplo abaixo:

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
   }
}
Agora, no seu código, tem uma classe chamada RoadTrip, como se segue.
public class RoadTrip
{
    private FourWheel myCarForTrip;
}

Agora sempre que você quer um exemplo de viagem; às vezes você pode querer um SUV para iniciar Quatro Rodas ou às vezes você pode querer Sedan. Isso realmente depende do que você quer baseado em situação específica.

Para resolver este problema, você gostaria de ter um padrão de fábrica como padrão de criação. Onde uma fábrica devolve a instância certa. Então eventualmente você vai acabar com um monte de código de cola apenas para instanciar objetos corretamente. A primavera faz melhor o trabalho de código de cola sem esse código de cola. Você declara mapeamentos em XML e inicializa os objetos automaticamente. Ele também faz lote usando a arquitetura singleton para instâncias e que ajuda no uso otimizado da memória. Isto também se chama inversão do controlo. Outros frameworks para fazer isso são Google guice, Pico container etc.

Além disso, a primavera tem um quadro de validação, um amplo apoio para a camada DAO em colaboração com JDBC, iBatis e Hibernate (e muitos outros). Fornece um excelente controle transacional sobre transações de banco de dados.

Há muito mais para a primavera que pode ser lido em bons livros como"Pro Spring".

URLs a Seguir pode ser de ajuda too.
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

 56
Author: Priyank, 2014-12-16 09:03:41

Antigamente, a primavera era um quadro de injecção de dependência apenas como (Guice, PicoContainer,...), mas agora um dia é uma solução total para construir você aplicação empresarial .

A injecção de dependência da primavera, que é claro o coração da primavera ainda está lá (e você pode rever outras boas respostas aqui), mas há mais da primavera ....

A primavera tem agora muitos projectos, cada um com alguns subprojectos. ([15]} http://spring.io/projects ). Quando alguém fala sobre a primavera, você deve descobrir o que O projeto da primavera ele está falando, é apenas o núcleo da primavera, que é conhecido como framework da primavera, ou é outro projeto da primavera. Alguns projectos da primavera que vale a pena mencionar são:

Se precisar de mais alguma funcionalidade para a sua aplicação, poderá encontrá-la também lá:

  • lote de primavera estrutura de lote concebida para permitir o desenvolvimento de
    lote
  • HATEOAS de primavera Fácil criação da base de descanso sobre HATEOAS principal
  • Primavera mobile and spring andriod for mobile application development
  • spring shell crie uma aplicação shell completa (aka command line)
  • spring cloud e spring cloud data flow para aplicações nas nuvens
Existem também alguns pequenos projectos, por exemplo, na primavera-social-facebook (http://projects.spring.io/spring-social-facebook/)

Você pode usar a mola para o desenvolvimento da web como tem o módulo Spring MVC que faz parte do projecto spring framework. Ou pode usar a mola com outra moldura web, como struts2 .

 28
Author: Alireza Fattahi, 2016-05-04 05:34:58
Para que serve a Primavera? Vou responder a essa pergunta em breve, mas primeiro, vamos dar outra olhada no exemplo de victor hugo. Não é um grande exemplo porque não justifica a necessidade de um novo quadro.
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);
  }
}
Feito! Então agora mesmo que você tenha centenas ou milhares de visualizações, você ainda precisa mudar a única linha de código, como na abordagem de Spring XML. Mas mudar uma linha de código ainda requer recompilação em vez de editar XML, diz? Bem, meu amigo exigente, usa Formiga e script a caminho! Então para que serve a Primavera? É para:
  1. Desenvolvedores cegos que seguem a manada
  2. Os empregadores que nunca querem contratar programadores de pós-graduação porque não ensinam esses quadros na Universidade. Projectos que começaram com um mau design e precisam de uma manta de retalhos (como mostra o exemplo de victor hugo)

Leitura Adicional: http://discuss.joelonsoftware.com/?joel.3.219431.12

 24
Author: Ash, 2015-06-03 02:14:33
Muito resumidamente, direi que a primavera é a "cola" na sua aplicação. É usado para integrar diferentes frameworks e seu próprio código.
 18
Author: Johan, 2010-04-29 15:33:55
A primavera são três coisas.
    Eu recomendo que leia a excelente introdução do Martin Fowler sobre a injecção de dependência.
  1. a segunda coisa que a primavera faz é embrulhar excelentes bibliotecas Java de uma forma muito elegante para usar em suas aplicações. Para um bom exemplo, veja como executores de tarefas de Primavera wraps e Scheduler De Quartzo.
  2. Em terceiro lugar, a Primavera fornece um monte de implementações de coisas web como descanso, um framework MVC web e muito mais. Eles acham que uma vez que você está usando a Primavera para os dois primeiros, talvez você pode apenas usá-lo para tudo o que o seu aplicativo web precisa.
O problema é que o Spring DI está muito bem pensado, os invólucros em torno de outras coisas estão muito bem pensados em que as outras coisas pensaram tudo e a Primavera embrulhou-o muito bem. As implementações da Primavera de MVC e descanso e todas as outras coisas não são tão bem feitas (MMMV, IMHO), mas há exceções (segurança da primavera é da bomba). Então eu tendem a usar mola para DI, e suas embalagens legais, mas prefiro outras coisas para Web (eu gosto de tapeçaria muito), descanso (Jersey é realmente robusto), etc.
 13
Author: karstensrage, 2014-12-16 09:10:02
O que provavelmente quer numa aplicação web com Spring -
  • Spring MVC, que com 2, 5+ lhe permite usar POJOs como classes de controlador, o que significa que você não tem que se estender a partir de qualquer framework em particular (como em Struts ou Spring pre-2.5). As classes de controlador também são muito simples de testar, graças em parte à injeção de dependência
  • integração de primavera com hibernado, o que faz um bom trabalho de simplificar o trabalho com essa solução ORM (na maioria dos casos)
  • Usar A Mola para um aplicativo Web permite que você use seus objetos de domínio em todos os níveis da aplicação - as mesmas classes que são mapeadas usando hibernado são as classes que você usa como "grãos de forma."Por natureza, isso levará a um modelo de domínio mais robusto, em parte porque vai reduzir o número de classes.
  • as marcas de formulários de mola tornam mais fácil criar formulários sem muito trabalho.

Além disso, a primavera é enorme - então há muitas outras coisas que você pode estar interessado em usar em uma aplicação web como Spring AOP ou Spring Security. Mas as quatro coisas listadas acima descrevem os componentes comuns da primavera que são usados em um aplicativo web.

 11
Author: bpapa, 2009-06-30 21:35:18

Vejo duas partes disto:

    "Para que serve exactamente a primavera" - > Veja a resposta aceite por victor hugo.
  1. "[...] Spring is [a] good framework for web development " - > people saying this are talking about Spring MVC. O MVC da primavera é uma das muitas partes da primavera, e é um framework web que faz uso das características gerais da primavera, como a injeção de dependência. É uma estrutura bastante genérica na qual é muito configurável: você pode usar diferentes camadas db (hibernar ), iBatis, plain JDBC), different view layers (JSP, Velocity, Freemarker...)

Lembre-se que pode perfeitamente usar a mola numa aplicação web sem usar o MVC da mola. Eu diria que a maioria das aplicações Web Java fazem isso, enquanto usam outros frameworks web como Wicket, Struts, Seam,...

 8
Author: Tom De Leu, 2012-01-10 07:55:37
A primavera é óptima para colar instâncias de aulas. Você sabe que suas classes hibernadas sempre vão precisar de um datasource, fios de mola eles juntos (e tem uma implementação do datasource também). Os seus objectos de acesso a dados vão precisar sempre de acesso hibernado, fios de mola, classes de hibernação para os seus DAOs para si. Além disso, a Primavera basicamente lhe dá configurações sólidas de um monte de bibliotecas, e nisso, lhe dá orientação no que libs que devias usar. A primavera é uma grande ferramenta. (Eu não estava falando sobre o MVC primavera, apenas o framework base).
 7
Author: stevedbrown, 2014-12-16 09:07:39

A resposta aceite não envolve o uso de anotações desde que a Primavera introduziu suporte para várias anotações para configuração.

Abordagem da Primavera (Injecção de Dependência)

Existe outra forma de transferir as classes ao lado de um ficheiro XML: as anotações. Vamos usar o exemplo da resposta aceita e registrar o feijão diretamente na classe usando uma das anotações @Component, @Service, @Repository ou @Configuration:

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

Por aqui quando o vista é criada magicamente terá um UserLister pronto para trabalhar.

A declaração acima é válida com um pequeno bónus sem necessidade de qualquer utilização de ficheiros XML e cablagem com outra anotação @Autowired que encontre uma implementação relevante e injecte-a.

@Autowired
private UserLister userLister;

Usa a anotação @Bean num método usado para fazer a implementação do feijão injectar.

 5
Author: Nikolas, 2018-05-17 22:05:45

A vantagem é a injeção de Dependência (DI). Significa terceirizar a tarefa de criação de objeto.Permitam-me que explique com um exemplo.

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
   }
}
Agora, no meu código, tenho um almoço de classe como se segue:
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 
    }
}
Na classe acima, dependendo do nosso humor, escolhemos Buffet() ou banhados(). No entanto, este sistema está fortemente acoplado. Cada vez que precisamos de um tipo diferente de objeto, precisamos mudar o código. Neste caso, comentando uma linha ! Imagine que há 50 diferentes aulas usadas por 50 pessoas diferentes. Seria uma grande confusão. Neste caso, temos de dissociar o sistema. Vamos reescrever a aula de almoço.
public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

Observe que em vez de criar um objeto usando nova palavra-chave passamos a referência a um objeto de tipo de almoço como um parâmetro para o nosso Construtor. Aqui, a criação de objeto é terceirizada. Este código pode ser wired usando Xml config file (legacy) ou Java Annotations (modern). De qualquer forma, a decisão sobre que tipo de objecto ser criado seria feito lá durante o período de execução. Um objeto seria injetado por Xml em nosso código - nosso código é dependente de Xml para esse trabalho. Assim, a injecção de Dependência (DI). DI não só ajuda em fazer o nosso sistema vagamente acoplado, ele simplifica a escrita de testes de Unidade, uma vez que permite que dependências a ser ridicularizado. Por último, mas não menos importante, a DI racionaliza a programação orientada para os aspectos (AOP), o que conduz a uma maior dissociação e ao aumento da modularidade. Note também que acima de DI está a injecção de Construtor. DI pode ser feito por injeção Setter, bem como o mesmo método setter velho simples de encapsulação.

 4
Author: Sumit Pokhrel, 2017-09-17 18:07:04

A Primavera é uma boa alternativa à tecnologia JavaBeans (EJB) Empresarial. Ele também tem framework web e Web services framework Componente.

 3
Author: fastcodejava, 2010-02-12 02:00:45

A Primavera começou como um sistema de injecção de dependência bastante simples. Agora é enorme e tem tudo nele (exceto o proverbial lava-loiças da cozinha).

Mas não tenha medo, é bastante modular para que você possa usar apenas as peças que você quer.

Para ver onde tudo começou.

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

Pode ser antigo, mas é excelente. livro.

Para outro bom livro desta vez exclusivamente dedicado à Primavera veja:

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

Também faz referência a versões mais antigas da primavera, mas vale a pena olhar.
 1
Author: Pablojim, 2009-06-30 15:38:19

A Primavera foi uma injecção de dependência no início, depois adiciona rei de embalagens para quase tudo (embalagem sobre implementações da APP, etc.).

É uma longa história ... a maioria das partes de Spring preffer XML solutions (XML scripting engine ... (2) para a utilização de Guice

Boa biblioteca, mas com despnedenciec em crescimento, por exemplo Spring JDBC (talvez uma solução JDBC Java com parâmetros de nomes reais) tirar de maven 4-5 seguinte.

Usando MVC de Primavera (parte de "Big spring") para Desenvolvimento web ... é um framework "baseado em pedidos", há a Guerra Santa" pedido vs componente"... até você

 1
Author: Jacek Cz, 2017-11-29 17:08:19
  • a mola é um quadro leve e flexível em comparação com o J2EE.
  • o recipiente de mola funciona como uma inversão do controlo.
  • a mola usa AOP, isto é, proxies e Singleton, padrões de concepção de métodos de fábrica e modelo.
  • arquitecturas em camadas: separação de preocupações e camadas reutilizáveis e fácil manutenção.

enter image description here

 1
Author: Premraj, 2017-12-05 06:08:27
No passado, pensei no quadro da Primavera do ponto de vista puramente técnico.

Dada alguma experiência de trabalho em equipa e desenvolvimento de Webapps empresariais - eu diria que a primavera é para um desenvolvimento mais rápido de aplicações (aplicações web) até dissociar os seus elementos individuais (feijões). Um desenvolvimento mais rápido torna-o tão popular. A mola permite transferir a responsabilidade de construir (cablagem para cima) a aplicação para a mola. O quadro da Primavera a injecção de dependência {[5] } é responsável pela ligação/ ligação dos feijões individuais a uma aplicação de trabalho.

Desta forma, os desenvolvedores podem se concentrar mais no desenvolvimento de componentes individuais (beans) assim que as interfaces entre beans são definidas.

O teste de tal aplicação é fácil - o foco principal é dado aos feijões individuais. Eles podem ser facilmente dissociados e ridicularizados, então o teste de unidade é rápido e eficiente.

A mola define múltiplas especializações feijões como @Controller (@Restcontroller), @repositório, @componente para servir fins web. A primavera em conjunto com a Maven fornece uma estrutura que é intuitiva para os desenvolvedores. O trabalho em equipe é fácil e rápido, pois há elementos individuais que são mantidos separados e podem ser reutilizados.

 0
Author: Witold Kaczurba, 2018-03-26 17:18:11

O quadro de primavera é defiantly bom para o desenvolvimento da web mais específico para a API de descanso. É por causa da injecção de dependência e integração com outros módulos como segurança da primavera, Popa de mola, quadro da mvc, microservices

Qualquer aplicação que construa precisa de segurança.
Se você está construindo um produto, longa manutenção, então você desafiadoramente precisa de um conceito de Aop.

Se a sua candidatura tiver muito mais carga então você precisa implementar micro-serviços.
A Primavera está a dar tudo isto numa plataforma. Suporte com muitos módulos
O principal é que a mola é open source {[[3]} e framework extensível, tem um gancho em todos os lugares para integrar o código personalizado no ciclo de vida.

Os dados da Primavera são um projecto que proporciona integração com o seu projecto.


Então tudo o que você precisa para construir aplicação tem Primavera.

 -1
Author: pratik deshai, 2018-02-13 13:43:23