Você pode usar @Bean
para disponibilizar uma classe de terceiros existente para o contexto de aplicativo da estrutura Spring.
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/view/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
Usando a @Bean
anotação, você pode agrupar uma classe de terceiros (ela pode não ter @Component
e não pode usar Spring), como um bean Spring. E, depois de empacotado @Bean
, é como um objeto singleton e está disponível no seu contexto de aplicativo da estrutura Spring. Agora você pode compartilhar / reutilizar facilmente esse bean em seu aplicativo usando injeção e dependência @Autowired
.
Então, pense na @Bean
anotação como um invólucro / adaptador para classes de terceiros. Você deseja disponibilizar as classes de terceiros para o contexto do aplicativo da estrutura Spring.
Usando @Bean
o código acima, declaro explicitamente um único bean porque, dentro do método, estou criando explicitamente o objeto usando a new
palavra - chave. Também estou chamando manualmente métodos setter da classe especificada. Para que eu possa alterar o valor do campo prefixo. Portanto, este trabalho manual é chamado de criação explícita. Se eu usar o @Component
para a mesma classe, o bean registrado no contêiner Spring terá valor padrão para o campo prefixo.
Por outro lado, quando anotamos uma classe com @Component
, não precisamos usar manualmente a new
palavra - chave. É tratado automaticamente pelo Spring.
@Component
,@Repository
&@Service
anotações no Spring?Lite mode
. E isso não é recomendado. Veja aqui: docs.spring.io/spring/docs/current/spring-framework-reference/…@bean
retorna uma instância personalizável do spring bean, enquanto@component
define uma classe que pode ser instanciada posteriormente pelo mecanismo IoC da primavera, quando necessário.