Spring 3

6 respostas
tiago.vt

pessoal estou começando a estuda spring 3, e deparei em varios artigos usando o @Inject e o @Named mais essas 2 anotações para injetar não faz parte do pacote do spring, usando essas 2 anotações estou usando o CDI do JEE 6 ?

6 Respostas

romarcio

As anotações @Inject e o @Named são referentes a JSR330 que é prevista para padronizar as anotações de injeção de dependências.
Vc pode usar elas ou usar as anotações do próprio pacote do spring @Autowired ou @Repository e @Service.

tiago.vt

romarcio:
As anotações @Inject e o @Named são referentes a JSR330 que é prevista para padronizar as anotações de injeção de dependências.
Vc pode usar elas ou usar as anotações do próprio pacote do spring @Autowired ou @Repository e @Service.

Entendi,

Então as classes POJO ou Beans posso anotalas com o @Service?

romarcio

Tipo @Autowired seria a mesma coisa que o @Inject
O @Repository e @Service funcionam como o @Named
Porém se usar o @Repository ele deve ser usado nas classes do tipo Dao e o @Service nas classes do tipo service.

tiago.vt

romarcio:
Tipo @Autowired seria a mesma coisa que o @Inject
O @Repository e @Service funcionam como o @Named
Porém se usar o @Repository ele deve ser usado nas classes do tipo Dao e o @Service nas classes do tipo service.

Entendi, mais meus beans como eu anotaria de forma correta sem usar o @Named com anotaçoes do srping

romarcio

Não sei qual tutorial você está seguindo, mas onde ele usa @Inject você usa o @Autowired, onde ele usa @Named e for classe dao(que trabalha com bd) você usa o @Repository e onde for classe de serviço, regra de negocio, a classe que vc quer fazer a injeção de dependencia, ao invés de @Named usa o @Service

O dao, a classe com métodos de banco, nunca serão injetadas, pq cada dao é especifico a seu tipo(UserDao, ContatoDao, PessoaDao). Então você deve injetar as classes de servico, tipo:
@Service
class ContatoService {
    //vamos injetar o UserService
    @Autowired
    private UserService userService;

    //vamos injetar o PessoaService
    @Autowired
    private PessoaService pessoaService;

}
guilherme737

Estou utilizando JSF2 + Spring 3 + Weld (implentação de referencia da JSR-330)

No meu caso tenho em minha DAO a seguinte situação:

@Repository
public class CursoDAOImplementacao extends GenericoDAOImplementacao implements
		CursoDAO {

	@Autowired
	public CursoDAOImplementacao(
			@Qualifier("sessionFactory") SessionFactory factory,
			@Qualifier("hibernateTemplate") HibernateTemplate hibernateTemplate) {
		setHibernateTemplate(hibernateTemplate);
		setSessionFactory(factory);
	}
}

Tenho esse construtor dessa forma pois é uma maneira que eu encontrei para injetar sessionFactory's diferentes de forma dinamica, para conectar em mais de um BD (Algo particular da minha aplicação).

O @Repository passa a ser @Named, o @Autowired => @Inject, e como poderia fazer com os meus @Qualifier's? Até tem uma anotação igual da JSR330 mas não comporta igual e se eu apenas substituir fica dando erro de compilação. Alguem tem alguma ideia?

Criado 28 de fevereiro de 2011
Ultima resposta 7 de abr. de 2011
Respostas 6
Participantes 3