[Logo] Neo Framework Forum
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Register] Registrar / 
[Login] Entrar 
Erro ao anotar @Bean  XML
Índice dos Fóruns -> Dúvidas
Autor Mensagem
edson.goncalez
Equipe

Membro desde: 15/04/2009 10:45:59
Mensagens: 5
Offline

Olá pessoal, por algum motivo usando o neo 3.4.0 na aplicação de exemplo dentro da classe AutorizacaoDAO o hibernateTemplate não estava sendo injetado automáticamente. Ao anotar com @Bean, por debug consegui detectar que a injeção está ocorrendo sem problemas, porém logo depois de injetar, em algum método que não parei pra ver.... está dando uma mensagem estranha do spring:

Code:
 12:40:07,162 INFO  [DefaultListableBeanFactory] Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [autorizacaoDAO,arquivoService,autorizacaoService,loginController,logoutController,municipioCrud,pessoaCrud,ufCrud,municipioService,pessoaService,ufService,arquivoDAO,municipioDAO,pessoaDAO,ufDAO]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [dataSource,config,sqlErrorCodesTranslator,neoImageResolver,neoFormater,authorizationDAO,jdbcTemplate,sessionFactory,hibernateTemplate,hibernateTransactionManager,transactionTemplate,multipartResolver]; root of BeanFactory hierarchy]
 12:40:53,499 INFO  [DefaultListableBeanFactory] Destroying singletons in factory {org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [autorizacaoDAO,arquivoService,autorizacaoService,loginController,logoutController,municipioCrud,pessoaCrud,ufCrud,municipioService,pessoaService,ufService,arquivoDAO,municipioDAO,pessoaDAO,ufDAO]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [dataSource,config,sqlErrorCodesTranslator,neoImageResolver,neoFormater,authorizationDAO,jdbcTemplate,sessionFactory,hibernateTemplate,hibernateTransactionManager,transactionTemplate,multipartResolver]; root of BeanFactory hierarchy}
 12:40:53,500 ERROR [ContextLoader] Context initialization failed
 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'autorizacaoService' defined in null: Unsatisfied dependency expressed through bean property 'autorizacaoDAO': There are 2 beans of type [class dao.AutorizacaoDAO] for autowire by type. There should have been 1 to be able to autowire property 'autorizacaoDAO' of bean 'autorizacaoService'.
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:897)
 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:817)
 


Alguém sabe o que poderia ser ?

Ahh, fiz uma pequena mudança no controller de login, eu coloquei a parte de código que fazia acesso ao DAO dentro de uma classe de serviço nova que criei específicamente para tratar de autorização, dessa forma ficamos com o MVC mais completo.

AutorizacaoDAO:
Code:
 @Bean
 public class AutorizacaoDAO implements AuthorizationDAO{
 	
 	public HibernateTemplate hibernateTemplate;
 
 	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
 		this.hibernateTemplate = hibernateTemplate;
 	}
 


AutorizacaoService:
Code:
 @ServiceBean
 public class AutorizacaoService extends GenericService<AutorizacaoDAO> {
 
 	public AutorizacaoDAO autorizacaoDAO;
 
 	public void setAutorizacaoDAO(AutorizacaoDAO autorizacaoDAO) {
 		this.autorizacaoDAO = autorizacaoDAO;
 	}
 
 	public User usuarioValido(Usuario usuario) {
 		if (usuario != null && usuario.getLogin() != null
 				&& !usuario.getLogin().isEmpty()) {
 			User userByLogin = autorizacaoDAO.findUserByLogin(usuario
 					.getLogin());
 			if (userByLogin != null
 					&& userByLogin.getPassword().equals(usuario.getPassword())) {
 				return userByLogin;
 			}
 		}
 		return null;
 	}
 }
 


LoginController:
Code:
 @Controller(path = "/modulo/login")
 public class LoginController extends MultiActionController {
 
 	private static final String AFTER_LOGIN_GO_TO = "/secured/crud/pessoa";
 
 	public AutorizacaoService autorizacaoService;
 
 	public void setAutorizacaoService(AutorizacaoService autorizacaoService) {
 		this.autorizacaoService = autorizacaoService;
 	}
 
 	@DefaultAction
 	public ModelAndView doPage(WebRequestContext request, Usuario usuario) {
 		return new ModelAndView("login", "usuario", usuario);
 	}
 
 	public ModelAndView doLogin(WebRequestContext request, Usuario usuario) {
 		User userByLogin = autorizacaoService.usuarioValido(usuario);
 		if (userByLogin != null) {
 			request.setUserAttribute("USER", userByLogin);
 			request.setUserAttribute(MenuTag.MENU_CACHE_MAP, null);
 			return new ModelAndView("redirect:" + AFTER_LOGIN_GO_TO);
 		} else {
 			request.addMessage("Login e/ou senha inválidos", MessageType.ERROR);
 		}
 		usuario.setSenha(null);
 		return doPage(request, usuario);
 	}
 
 }
 


Att.
Edson.
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

Olá Edson, o problema está aqui:

Code:
 @Bean
  public class AutorizacaoDAO implements AuthorizationDAO{
 


O bean que implementar AuthorizationDAO não deve utilizar a anotação @Bean.

Esse bean já será reconhecido e registrado pelo neo automaticamente (mesmo sem a anotacao), então se voce utilizar a anotacao, seu bean será registrado 2 vezes, causando confusão na injeçao de dependencia.

Até mais

Rógel
 
Índice dos Fóruns -> Dúvidas
Ir para:   
Powered by JForum 2.1.7 © JForum Team