segunda-feira, 16 de março de 2009

Autowiring

Um adendo à postagem do Conde:

Se quiser deixar tudo "anotado", inclusive seu DAO, não precisa configurar o SessionFactory, uma opção é colocar ele como "autowired".

Ou configure "na mão":

@Autowired
 public ISIDaoImpl(SessionFactory sessionFactory) {
  setSessionFactory(sessionFactory);
 }

Ou coloque  como padrão no seu contexto:

<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-2.5.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-2.5.xsd"

  default-autowire="byName">

O autowire significa que o Spring irá descobrir qual é a dependência.

No segundo exemplo, você nem precisa colocar na classe o que será autowired. O Spring vai procurar todas as dependências da classe e se encontrar outra classe com o mesmo nome, irá injetar esta dependência. Como mágica!

Embora este método seja muito prático, é bom não abusar. Ele pode incentivar alguns erros humanos e inconsistência. Às vezes apesar de levar mais tempo, é melhor ter o xml com as dependências explicitas para maior controle.

Além disso, essas comodidades podem custar tempo. Tempo de execução! Segundo o blog ObjectLab, autowiring é mais lento. Eu pessoalmente não fiz o teste. Na grande maioria das vezes esse é um fator de peso na modelagem de um sistema, então talvez ainda valha a pena usar um contexto artesanal.  

O que acham? Qual á a experiência de vocês com isso? Vale a pena sacrificar rapidez do sistema para praticidade do código?


2 comentários:

  1. Faz um loop de select, cara!

    ResponderExcluir
  2. Não sei Lia ! Talvez sim, se for para um projeto pequeno com poucos acessos não vejo problema. Só não usaria caso fosse um projeto de missão critica com um load muito alto !

    ResponderExcluir