Spring como fábrica de objetos (conceito)

Olá pessoal!

Estou estudando o spring e tenho uma dúvida: é uma boa prática usa-lo como fábrica de objetos para minha aplicação?

Exemplo: em uma aplicação web, tenho que criar um cliente e seu endereço mas para isso preciso criar uma instância da classe Cliente e Endereco e depois setar o endereço do cliente para depois salvar.

Nestes casos, eu uso os recursos do spring para criar os objetos, faço minha própria fábrica ou uso o new? Qual será a melhor prática?

O interessante de você utilizar o Spring é no caso onde seus objetos possuem dependência de outros objetos.

Por exemplo, você tem a classe UserRepository e na implementação desta classe, existe o atributo dao do tipo UserDao que é uma interface.

O interessante do spring é que setando as dependências de cada classe, ao solicitar uma instancia da classe UserRepository, ela já vem com o atributo dao preenchido, não tendo a necessidade de usar o set, ou evitando o null pointer exception.

Se você vai simplesmente gerenciar objetos simples e sem dependência, nao vejo vantagem em usar o Spring.

[]'s

Vale lembrar que o Spring provê mto mais do que resolver as dependências entre Objetos, um exemplo disso é o suporte ao Hibernate ou JDBC que ele provê, mto legal!

Existem lugares onde o relacionamento de objetos é obrigatório, usando seu exemplo, o Cliente sempre terá um Endereço.

Mas existem casos (principalmente entre camadas diferentes) onde o relacionamento (ou acoplamento) dos objetos não é bom, ai nesse caso é interessante utilizar o Spring para injetar os objetos.

Por exemplo, na sua camada de serviço, voce tem um acoplamento entre a camada DAO e a camada de DOMAIN, nesse caso é interessante injetar esses objetos e assim evitar acoplamento estático

Valeu pessoal!

Então neste caso que citei, onde a classe entidade Cliente tem Endereco (sempre terá), será que é uma boa prática usar o spring para criar o objeto cliente sendo que ambos não implementam nenhuma interface?

Se for, eu poderia criar o objeto implementando uma classe factory com um método que recebe como parâmetro o nome da classe que será criada e usando os recursos do spring, criar o objeto ou injetar a dependência (como já foi dito). Pelo que vi no doc do Spring, eu poderia injetar configurando um método onde a cada chamada ( getCliente() ) um novo objeto Cliente será criado (com suas dependências). Para um sistema corporativo, existe alguma outra forma melhor de fazer isso ou qual dessas será a mais adequada :?: