
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
aquiLiçã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.javapackage 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 ...