1. Beans

Agora que o Spring sabe quais classes serão Beans em virtude das anotações acima utilizadas (Esteriótipos), ele precisa saber onde ele irá injetar essas instancias quando necessárias.

Bom, nós utilizamos o Objeto Service dentro do nosso Controller, por exemplo. Pois assim podemos usar os métodos findAll, findById, etc. Portanto, a classe Controller, terá uma dependência da classe Service (mas não é mandatório).

Precisamos mostrar essa depência pro Spring, para que ela saiba onde injetá-las quando necessário. Assim sendo, criaremos os Pontos de Injeção (Dependência) de uma classe com a outra.

@Autowired
@Qualifier("parkingSpotServiceImpl")
private ParkingSpotService parkingSpotService;
  • @AutoWired - Sempre que necessário, o Spring injetará o Bean Service, dentro do Bean Controller.

Inicialmente, o ParkingSpotService importado acima, é uma interface contendo diversos métodos. Essa interface pode ter outras classes utilizando os seus métodos (implementando ela). Ou seja, o Spring não consegue identificar qual Bean será injetado. Qual a solução? Usar a Anotação abaixo: @Qualifier

  • @Qualifier - Dentro dela, passamos qual Classe (que está implementando a interface/service) será utilizada.

  • @Value - Algumas vezes precisamos definir algumas variáveis nas propriedades que usamos dentro do codigo.

Mas ao invés de deixar isso fixo em um Controller, por exemplo, é uma boa prática declarar essas propriedades dentro do arquivo properties. Logo, se precisarmos fazer alguma melhoria/alteração (até mesmo sem parar a aplicação), fica muito mais fácil. Exemplo:

app.name=Parking Control API
app.port=80
app.host=parkingcontrolapp

Para que isso seja exibido ao utilizarmos um método, criamos uma variável dentro da classe passando o @Value.

@Value("${app.name}")
private String name;

@Value("${app.port}")
private String appPort;

@Value("${app.host}")
private String appHost;

Para exibir os valores, é só dar um SOUT dentro do método. Veja aqui

Atualizado