Série Spring:Injeção de dependência com Spring via Annotations

olá Pessoal,

No post de hoje vamos ver como usar annotations no Spring para fazer a injeção de depência. Nos posts anteriores vimos como fazer isso de forma declarativa, ou seja, usando o xml. Agora vamos para algo mais clear, pois sistemas grandes e muitas informações no xml pode ser um pensadelo durante a manuteção.

lets go…

Iniciando

Vamos criar um java project SpringAnnotations com a seguinte estrutura:

springannotationsproject

Criaremos uma interface e uma classe que implementa a mesma:

public interface MachineRegister {

                public void register();

}

public class Caixa1 implements MachineRegister {

                @Override

                public void register() {

                               System.out.println(“Caixa 1 registrado”);}

}

 

E agora teremos a classe que tem dependência:

 public class CentralMachine {

                private MachineRegister machineRegister;

 

                public CentralMachine(MachineRegister machineRegister) {

                               super();

                               this.machineRegister = machineRegister;

                }

                public void setMachineRegister(MachineRegister machineRegister) {

                               this.machineRegister = machineRegister;

                }

                public MachineRegister getMachineRegister() {

                               return machineRegister;

                }

                public void register() {

                               machineRegister.register();                      

                }}

 

Se fossemos declarar essa classe no xml seria assim:

 <bean  id=”caixa1″ class=”br.com.camilolopes.classes.Caixa1″/>

 <bean  id=”centralMachine” class=”br.com.camilolopes.classes.CentralMachine”>

 <constructor-arg name=”caixa1″ ref=”caixa1″/>

 </bean>

 

Mas, veremos como será via Annotations a seguir.

 

Usando Annotations

Vamos ver alguns conceitos importantes que você vai se deparar no código a seguir, mas resolvi dar um overview antes. 

No Spring a dependency injection via annotations nao vem configurado por default, é preciso informar isso ao .xml. Para fazer isso precisamos apenas adicionar a seguinte linha 

<context:annotation-config /> 

E atualizar o cabeçalho do beans para :

xmlns:context=”http://www.springframework.org/schema/context”

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd”

Feito isso podemos remover as injenção de dependência.

O arquivo ficará assim:

<beans xmlns=”http://www.springframework.org/schema/beans”

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xmlns:context=”http://www.springframework.org/schema/context”

xsi:schemaLocation=”http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd“>

<!– Aqui estamos declarando o beans  –>

<bean  id=”caixa1″/>

 <bean  id=”centralMachine” class=”br.com.camilolopes.classes.CentralMachine”/>

 <context:annotation-config/>

</beans>

 

Agora vamos dizer ao Spring as dependências via annotations. Na classe CentralMachine adicione a seguinte anotação:

 public class CentralMachine {

                @Autowired

                private MachineRegister machineRegister;

                @Autowired

                public CentralMachine(MachineRegister machineRegister) {

                               super();

                               this.machineRegister = machineRegister;

                }

 

@AutoWired Annotation

Para injectar a dependencia usamos anotação @Autowired. Assim estamos dizendo que a classe X tem uma dependência de Y.

 Problema

Quando temos uma interface que é implementada por mais de uma classe como o Spring vai saber qual queremos?

Ele não vai saber, porque o Spring não tem bola de Cristal simplesmente  vai lançar uma exceção NoSuchBeanDefinitionException.

 Resolução

@Qualifier Annotations

Permite dizer para o Spring qual implementação ele deve considerar, passamos o id do bean.

public class CentralMachine {

                @Autowired

                @Qualifier(“caixa1”)

                private MachineRegister machineRegister;

 Agora vamos criar uma classe com o método main para testar:

 public class Main {

                public static void main(String[] args) {

//                           essa classe é o container

                ApplicationContext applicationContext = new ClassPathXmlApplicationContext(

                                                               “conf/springconfiguration.xml”);

                 CentralMachine bean = (CentralMachine) applicationContext.getBean(“centralMachine”);

                               bean.register();

                }}

 

Resultado:

resultspringannotations

 

Pronto. Estamos usando annotations para fazer a injeção de depência no Spring. Simples não? Observe que diminuimos  algumas configuração que teriamos que no xml e passamos a fazer direito no código.Particularmente eu gosto muito de annotations.

Os projetos

GitHub: https://github.com/camilolopes/workspacespring

Vou ficando por aqui…

see ya!!

Série Spring: Hello World no Spring

 

olá Pessoal,

Estarei dando inicio a mais uma série aqui no blog e dessa vez é com o Spring framework. No post de hoje veremos como dar um Hello World usando o Spring, parece algo simples e fácil né? Mas, na verdade é. Porém, para quem nunca mexeu com Spring ainda pode achar que é complicado.

O Spring

Sem entrar na teoria pq o que não falta é fonte explicando o que é e pra que serve o framework. Eu digo sempre que o Spring é cara que nos ajuda a não fazer as coisas chatas e repetivas do dia-dia, que normalmente para o cliente não tem valor algum.

 Hello World

Vamos criar um java project, mas não esqueça de ir no site do Spring e baixar a versão mais recente. Estarei usando a versão 3.x.

Development

1. Crie um  java project

2. E os seguintes packages
springhelloworldpackage

3. Agora crie uma classe chamada SpringHelloWorld que terá um método o qual irá imprimir no console a mensagem

“Hello World Spring”.

package br.com.camilolopes.classes;

public class SpringHelloWorld {

                public void showHelloWorld(){

                               System.out.println(“Hello World Spring”);

                }}

4. No package conf  crie um arquivo XML , aqui chamei de springconfiguration.xml. E adicione o código a seguir ao arquivo:

<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-3.0.xsd”>

 <bean  id=“hello” class=“br.com.camilolopes.classes.SpringHelloWorld”/>

</beans>

 

O cabeçalho temos  a configuração do Spring e a versão que estamos o usando. Mas, o essencial está na tag do bean. Ali estamos dizendo ao Spring para ele instanciar um objeto para a classe SpringHelloWorld, sendo assim  na aplicação podemos obter essa instância pelo id do bean e invocar qualquer método disponível da classe. Isso é o mesmo que fazemos

SpringHelloWorld variavelInstancia = new SpringHelloWorld();

Só que agora quem faz isso é o Spring e não nós mais. Veremos a seguir na prática o uso.

5. crie uma classe com o método main. Chamei a minha de Main.

package br.com.camilolopes.main;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext; 

import br.com.camilolopes.classes.SpringHelloWorld;

public class Main {

      public static void main(String[] args) {

//          essa classe é o container

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(

                        “conf/springconfiguration.xml”);

            SpringHelloWorld bean = (SpringHelloWorld) applicationContext.getBean(“hello”);

            bean.showHelloWorld();      }}

 O ApplicationContext é o coração do Spring é através deles que vamos obter o que precisamos para trabalhar. Observe que informei para o ApplicationContext  onde está o arquivo de configuração do Spring que ele precisa se basear.Em seguida tem um .getBean e passei o id do bean que desejo, que é o id que declaramos no xml:

<bean  id=“hello” class=“br.com.camilolopes.classes.SpringHelloWorld”/>

 Ou seja, nesse momento o Spring já fez o new na classe por baixo dos panos, agora podemos fazer o que quiser com o objeto, nesse caso chamei  o único método existente e o resultado foi:

helloworldspringresult

 Simples assim!!. E isso é o básico do Spring.

GitHub

Acesse o repositório no github com todos os projetos da série Spring:  https://github.com/camilolopes/workspacespring

Vou ficando por aqui e espero que tenham gostado do post.

Abraços,

 

 

Série Git na Prática: Atualização específica de um arquivo na branch

Olá Pessoal,

No post de hoje vamos ver como atualizar um arquivo especifico na branch a partir da master. Como assim? Vou explicar no decorrer do post.

Lets go…

Starting….

Vamos dizer que a branch master foi atualizada e o arquivo que estou trabalhando sofreu atualização e preciso trazer para branch, então o comando seria  o seguinte:

git checkout master <nome do arquivo>

Assim estamos trazendo o arquivo do master para o branch.

Então vamos supor que na branch de development estou trabalhando com o arquivo Main.java

E na master alguém alterou o arquivo e fez o commit e ele está assim:

E agora preciso pegar essa atualização e trazer para branch. Nesse caso não haverá conflitos porque as alterações foram em pontos diferentes.

Observe que temos arquivos para commit, devido atualização que fizemos:   

Resultado após o commit:

Lembrando: as alterações feitas no arquivo na branch serão perdidas. 

Abraços, see ya!! 

Série Git na Prática:Descartando alterações no working directory

Olá Pessoal,

No post de hoje veremos como descartar alterações quando ainda estamos no working directory.

Lets go..

 Starting…

Algo muito comum é você fazer alteração no arquivo e depois ver que não seria necessário mais aquela alteração e quer descartar. Mas, o que fazer? Ao modificar o arquivo o git vai informar assim:

Então antes de ir para o INDEX queremos descartar as mudanças feitas e deixar o arquivo como antes. Como proceder?

Simples! Basta executarmos o seguinte comando:

git checkout <nome do arquivo>

Se executarmos novamente o git status veremos que não há nada alterado e se abrirmos o arquivo, ele estará como antes.

Só isso. Simples, não? Não é. O git que é fácil.  🙂

See ya!! Abraços.

Git na prática: Entendendo o rebase

Olá Pessoal,

No post de hoje vamos entender o rebase que temos no git.  Acho umas das mais importantes features do git.

Lets go…

Starting …

O rebase é algo tão comum quanto tomar café todos os dias. Na prática, precisamos dele quando estamos trabalhando na branch e sabemos que o repositório master foi atualizado por outros desenvolvedores e precisamos ter nosso branch atualizado, concorda? Não  é nada legal ficarmos trabalhando na branch com o código de 2 dias atrás. Podemos ter problemas e sérios conflitos aqui na hora do merge, o melhor é que se for ter conflito que seja pequeno e de imediato.

In practice

Considerando o cenário dos posts anteriores onde temos a branch development, vamos supor que ficamos trabalhando na branch por alguns dias e a master sofreu alteração, alguém adicionou um novo arquivo lá e fez o commit.

E agora precisamos trazer esse novo arquivo para o branch, assim vamos garantir que nossa branch está igual à master.

Para isso:

1      Vamos na branch git checkout development

2      Dizer para realizar um rebase da branch master

git rebase master

E o que acontece aqui?

Simples, o git se encarrega de colocar os commit que foram feitos na branch em uma branch temporária e pega os commits da master e coloca na branch, depois ele pega os commit que ele mesmo colocou na branch temporária e coloca de volta na branch development. Aqui ele valida commit por commit, ou seja, é possível ter conflito e teremos que resolver manualmente. Veja como ficou o branch com o novo arquivo que tínhamos apenas na master:

A seguir o ciclo:

E depois que terminamos de trabalhar com a branch podemos fazer um merge, como vimos nesse post. E termos a master atualizada, conforme podemos ver na última imagem (de cima para baixo).

Esse é o rebase. Simples, não?

See ya !! Abraços.