Como eu estudo o framework Spring - parte 2 (ajuda para iniciantes - o trabalho dos próprios iniciantes)



Boa tarde

Eu fui inspirado pelo convite para continuar publicando, então continuo.

Desta vez, consideraremos as principais opções para implementar a dependência - por meio do construtor e dos setters. Pesquise todas as fontes aqui

Lição 06. Implementação através do construtor.


Novamente, tome o projeto da lição 2 como base.

Adicione outro poeta. src \ main \ java \ spring \ impls \ Severyanin.java

package spring.impls; import spring.intarfaces.Lyricist; public class Severyanin implements Lyricist { @Override public String Generate() { return "   ,   ,\r\n" + "    …\r\n" + "  —    — ,\r\n" + ",  ,   . "; } } 

Registre a classe no arquivo de configuração src \ main \ resources \ ApplicationContext.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.xsd"> <bean id="LyricistBean1" class="spring.impls.Poushkin"/> <bean id="LyricistBean2" class="spring.impls.Mayakovsky"/> <bean id="LyricistBean3" class="spring.impls.Severyanin"/> </beans> 

No início do século XX, os duelos literários eram muito populares.

Vamos organizar um duelo literário entre dois poetas. Para fazer isso, crie a cena src \ main \ java \ spring \ impls \ Stage.java

 package spring.impls; import spring.intarfaces.Lyricist; public class Stage { private Lyricist lyr1; private Lyricist lyr2; public Stage(Lyricist lyr1, Lyricist lyr2) { this.lyr1 = lyr1; this.lyr2 = lyr2; } public void Act() { System.out.println(" :"); System.out.println(lyr1.Generate()); System.out.println(); System.out.println(" :"); System.out.println(lyr2.Generate()); System.out.println(); System.out.print("    "); if (Math.random() < 0.1) { System.out.println(" ."); } else { System.out.println(" ."); } } } 

Em princípio, você pode alterar src \ main \ java \ spring \ main \ Start.java - e funcionará:

 package spring.main; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import spring.impls.Stage; import spring.intarfaces.Lyricist; public class Start { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Lyricist lyr1 = context.getBean("LyricistBean2", Lyricist.class); Lyricist lyr2 = context.getBean("LyricistBean3", Lyricist.class); Stage myStage = new Stage(lyr1, lyr2); myStage.Act(); ((ConfigurableApplicationContext) context).close();//   } } 

Começamos - tudo funciona. Os poetas emitiram uma obra-prima, a segunda, provavelmente, venceu. Assim deveria ser, em 27 de fevereiro de 1918, no Museu Politécnico da Eleição do Rei dos Poetas, o nortista derrotou Mayakovsky. Mas demos a Vladimir Vladimirovich uma pequena chance. Talvez na sua versão ele tenha vencido.

Agora, faremos todas as configurações no arquivo de configuração src \ main \ resources \ ApplicationContext.xml , não vale a pena configurar explicitamente os beans no arquivo inicial.

 <?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.xsd"> <bean id="LyricistBean1" class="spring.impls.Poushkin"/> <bean id="LyricistBean2" class="spring.impls.Mayakovsky"/> <bean id="LyricistBean3" class="spring.impls.Severyanin"/> <bean id="StageBean" class="spring.impls.Stage"> <constructor-arg ref="LyricistBean2" /> <constructor-arg ref="LyricistBean3" /> </bean> </beans> 

Normalmente, os beans são criados com o construtor padrão sem argumentos. Mas no nosso caso, não vai funcionar. Vamos passar como argumentos argumentos para outras caixas geradas de Mayakovsky e Severyanin.

Resta remover todos os desnecessários da classe src \ main \ java \ spring \ main \ Start.java

 package spring.main; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import spring.impls.Stage; public class Start { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Stage myStage = context.getBean("StageBean", Stage.class); myStage.Act(); ((ConfigurableApplicationContext) context).close();//   } } 

Começamos. Tudo funciona. Feijão é criado. O nortista venceu novamente.

Enfim, na minha realidade.

Agora vamos ver como os setters podem ser configurados.

Lição 07. Implementação por meio de setters.


Continuamos a atormentar o projeto anterior.
Provavelmente, é errado criar poetas ao criar uma cena.
Corrija essa supervisão e mude um pouco a classe da cena. Vamos remover o construtor e adicionar setters para lyr1 e lyr2 de src \ main \ java \ spring \ impls \ Stage.java

 package spring.impls; import spring.intarfaces.Lyricist; public class Stage { private Lyricist lyr1; private Lyricist lyr2; public void setLyr1(Lyricist lyr1) { this.lyr1 = lyr1; } public void setLyr2(Lyricist lyr2) { this.lyr2 = lyr2; } public void Act() { System.out.println(" :"); System.out.println(lyr1.Generate()); System.out.println(); System.out.println(" :"); System.out.println(lyr2.Generate()); System.out.println(); System.out.print("    "); if (Math.random() < 0.1) { System.out.println(" ."); } else { System.out.println(" ."); } } } 

Modifique o arquivo de configuração src \ main \ resources \ ApplicationContext.xml . Removemos os argumentos do construtor e adicionamos os valores do setter.

 <?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.xsd"> <bean id="LyricistBean1" class="spring.impls.Poushkin"/> <bean id="LyricistBean2" class="spring.impls.Mayakovsky"/> <bean id="LyricistBean3" class="spring.impls.Severyanin"/> <bean id="StageBean" class="spring.impls.Stage"> <property name="lyr1" ref="LyricistBean2"></property> <property name="lyr2" ref="LyricistBean3"></property> </bean> </beans> 

A classe inicial neste caso não pode ser tocada. Começamos. Tudo funciona. Observe que o construtor com dois parâmetros não inicia para a cena, mas depois de criar a cena, dois setters são definidos.

Para continuar ...

Source: https://habr.com/ru/post/pt421093/


All Articles