Como obter objeto criado pelo Spring em uma classe "normal" que não seja um Servlet

Olá!

Estou usando o Spring em uma aplicação que irá ser integrada com o Flex e estou utilizando o OpenAMF para fazer a ponte entre o Flex e o Java. Estou iniciando a implementação dos serviços do OpenAMF e gostaria de saber como acessar o meu Dao criado pelo Spring dentro dessa classe de serviço.

Configuração do Spring:

.... <bean id="dao" class="br.edu.unifeob.sgp.daos.Dao"> <property name="sessionFactory" ref="sessionFactory" /> </bean>

Em um Servlet eu faria:

ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext( getServletContext() ); Dao dao = ( HibernateClienteDao) context.getBean( "dao" );

No serviço:

[code]
public class UsuarioAdministradorService {

public void salvar( String login, String senha ) throws Exception {

    UsuarioAdministrador u = new UsuarioAdministrador();
    u.setLogin( login );
    u.setSenha( senha );

    // como obter o DAO???
    Dao dao = ?;

    dao.getHibernateTemplate().saveOrUpdate( u );

}

}[/code]

Como que eu posso obter o meu objeto “dao” em uma classe normal?

Obrigado! Abraço!

vc não pode obter a service no servlet e injetar direto o dao na service ?

o que o ronybrand disse é o mais correto, mas se precisar mesmo acessar pode fazer assim

ApplicationContext context = new ClassPathXmlApplicationContext("/WEB-INF/applicationContext.xml");

Mas eu vou ter que manter um servlet só para isso???

Eu quero ter acesso direto aos objetos criados pelo Spring, não tem como fazer isso?

Tenho isso aqui (abaixo) em uma classe de teste, mas toda vez que é executada ela carrega as configurações do Spring, e se eu fizer isso no meu serviço vai ficar pesado concordam? Eu posso obter o BeanFactory apenas uma vez e deixar ele vivo na aplicação como um membro static? Isso está me cheirando a gambiarra…

[code]
Resource configuration =
new ClassPathResource("/applicationContext.xml");
BeanFactory factory =
new XmlBeanFactory( configuration );

Dao d = ( Dao ) factory.getBean( “dao” );[/code]

Olá davidbuzatto, blz…

Vc pode criar uma classe utilitária, masi ou menos assim…

public class Util implements ApplicationContextAware
{
	private static ApplicationContext appContext;

	public static Object getBean(String beanName)
	{
		return appContext.getBean(beanName);
	}
        
        public void setApplicationContext(ApplicationContext context) throws BeansException {
		appContext = context;
	}
}

E o seu Service, ou em qualquer outro lugar, vc obtem o seu bean dessa forma…

SeuDao d = (SeuDao) Util.getBean("dao");

Acho que é isso, espero que tenha ajudado ! :slight_smile:

Olá joão!

Valeu! Muito obrigado! Vou testar e posto no que que deu!

Abraço!

João, não funcionou, o método getBeans está retornando null…
Tem outra alternativa?

Tenho que configurar alguma coisa no .xml do spring para essa classe funcionar?
Desculpa a ignorância :smiley:

Cara eu esqueci de postar anteriormente, no seu applicationContext.xml vc declarou a classe Util ?,
como por exemplo:

<bean id="util" class="seuPacote.suaClasseUtill" />

O pior que esse código que postei, eu utilizo ele sem problemas nos meus projetos, e as outras alternativas que conheço são as mesmas q já postaram…

Mas vou dar uma pesquisada e se encontrar um novo jeito te envio…

Falow !!!

Eita!

Funcionou!
Faltava a configuração mesmo, suspeitei desde o princípio!

Muitíssimo obrigado!
Abraço!

Falow meu brother fico feliz em ter ajudado…

Qualquer coisa é só falar !!! :smiley:

cara,
da uma procurado pelo autoWireByName do Spring… injeção de dependencia de forma muita mais limpa… sem classe utilitarias.

[]'s

[quote=jgbt]cara,
da uma procurado pelo autoWireByName do Spring… injeção de dependencia de forma muita mais limpa… sem classe utilitarias.

[]'s
[/quote]

Vou dar uma olhada!
Obrigado!