Небольшая проблема с автопроводом гибернации в проекте spring, ошибка bean not found

#java #hibernate #spring #autowired

#java #переход в спящий режим #spring #автозапуск

Вопрос:

я хотел попробовать <context:component-scan base-package /> функцию spring 3.0.5.

у меня есть эта запись в ApplicationContext :

 <context:component-scan base-package="com.project.personal.admin.model"/>
<context:annotation-config />
  

у меня есть класс manager, который знает, как создать любой POJO и DAO.

 @Component("manager")
public class ManagerImpl implements ApplicationContextAware, Manager {

  ApplicationContext applicationContext;

  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.applicationContext = applicationContext;
  }

  public User CreateUser(){
    return (User) getInstance("user", User.class);
  }


  public UserDAO createUserDAO(){
    return (UserDAO) getInstance("userDAO", UserDAO.class);
  }
 //....
}
  

Pojo, подобный :

 @Entity
@Table(name = "user", uniqueConstraints = {
@UniqueConstraint(columnNames = {"email"})})
@Component("user")
public class User {

  public User() {
    this.dateCreated = new Date();
  }


  @Id
  @GeneratedValue(generator = "uuid")
  @GenericGenerator(name = "uuid", strategy = "uuid.hex")
  @Column(name = "id", length = 32)
  private String id;
  @Column(name = "email", length = 150)
  private String email;

 //setters and getters
}
  

мой тестовый класс выглядит так

 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:META-INF/test-project-admin-config.xml"})
@TransactionConfiguration(defaultRollback=true)
@Transactional
public class UserDAOImplTest {
    //@Autowired
    @Resource(name="manager")
    Manager manager;

    @Autowired
    UserDAO userDAO;

    public UserDAOImplTest() {
    }

    @Test
    public void testSave() {
        User u1 = manager.CreateUser();
        u1.setEmail("misterjojtoo@gmail.com");
        u1.setFullname("joseph djomeda");
        u1.setPassword("psaumedetdavid");
        userDAO.save(u1);
        User expResult = u1;

        User result = (User)userDAO.getById(u1.getId());

        Assert.assertEquals(expResult, result);
        Assert.assertEquals(expResult.getId(), result.getId());
     }

    }
  

у меня эта ошибка :

org.springframework.beans.factory.Исключение NoSuchBeanDefinitionException: нет соответствующего компонента типа [com.project.personal.admin.manager.Диспетчер] найдено для зависимости: ожидается по крайней мере 1 компонент, который квалифицируется как кандидат autowire для этой зависимости. Аннотации к зависимостям: {@org.springframework.beans.factory.annotation.Автозапуск (обязательно = true)}

большую часть времени я создаю запись в applicationcontext для каждого класса, и это работает, на этот раз я хотел попробовать сканирование пакета. Это что-то, с чем я не справляюсь? я попробовал автозапуск, а позже и ресурс. Итак, у меня закончились идеи

спасибо, что прочитали это.

Комментарии:

1. Имеет ли контекст приложения, test-project-admin-config.xml который вы определяете в своей @ContextConfiguration аннотации, все то же содержимое, что и тот, который вы используете в своем приложении? Там должно быть сканирование компонентов. В противном случае он не найдет ваш класс.

Ответ №1:

Убедитесь, что ваш Manager находится в правильном пакете (или что ваш base-package установлен правильно) (я бы не стал упоминать об этом, но кажется подозрительным наличие manager в пакете model)

Комментарии:

1. Здравствуйте, ваш ответ заставил меня кое-что осознать. на самом деле это проект maven. были ли у меня модуль модели, модуль сервиса и модуль веб-приложения. pojos находятся в com.project.personal.model.domain , а manager вместо того, чтобы быть в com.project.personal.model.manager , я вставил его в com.project.personal.manager . большое спасибо