2015-09-30 2 views
1

Maven Зависимости(Spring MVC + Hibernate 4 + Тест 4) autowired ДАО возврата NULL

<!-- SPRING MVC --> 
<spring-version>4.0.3.RELEASE</spring-version> 
<spring-test-version>4.2.1.RELEASE</spring-test-version> 
<!-- TESTS --> 
<junit-Version>4.11</junit-Version> 
<!-- DATA BASE --> 
<hibernate.version>4.1.5.Final</hibernate.version> 
<hibernate-validator>4.2.0.Final</hibernate-validator> 
<mysql.connector.version>5.1.32</mysql.connector.version> 

AccountDao.java

@Repository 
@Transactional 
public class AccountDao { 

    private final SessionFactory sessionFactory; 

    @Inject 
    public AccountDao(SessionFactory sessionFactory) { 
     this.sessionFactory = sessionFactory; 
    } 
    [...] 
} 

Тест

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = {SpringMVCInitializer.class}, loader=AnnotationConfigContextLoader.class) 
public class LoadingTests extends TestMachine { 

    @Autowired 
    private AccountDao accountDao; 

AppConfig.java

@Configuration 
@PropertySource("classpath:application.properties") 
@ComponentScan(basePackages = "company") 
@EnableTransactionManagement 
public class AppConfig { 

     @Bean 
     public AccountDao accountDao() { 
      return new AccountDao(); 
     } 

     @Bean 
     public PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() { 
      return new PropertySourcesPlaceholderConfigurer(); 
     } 

     @Bean 
     public JdbcTemplate jdbcTemplate() { 
      return new JdbcTemplate(dataSource()); 
     } 

     @Bean 
     public DataSource dataSource() { 
      DriverManagerDataSource dataSource = new DriverManagerDataSource(); 

      /*LOCAL*/ 
      dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
      dataSource.setUrl("jdbc:mysql://localhost:3306/compamny"); 
      dataSource.setUsername("root"); 
      dataSource.setPassword(""); 

      return dataSource; 
     } 

     @Bean(name = "sessionFactory") 
     public LocalSessionFactoryBean sessionFactory() { 
      LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); 
      sessionFactoryBean.setDataSource(dataSource()); 
      sessionFactoryBean.setPackagesToScan("insynctive.model"); 
      sessionFactoryBean.setHibernateProperties(hibProperties()); 
      return sessionFactoryBean; 
     } 

     @Bean 
     public HibernateTransactionManager transactionManager() { 
      HibernateTransactionManager transactionManager = new HibernateTransactionManager(); 
      transactionManager.setSessionFactory(sessionFactory().getObject()); 
      return transactionManager; 
     } 

     private Properties hibProperties() { 
      Properties properties = new Properties(); 
      properties.put(Environment.HBM2DDL_AUTO, "create"); 
      properties.put(Environment.DIALECT, "org.hibernate.dialect.MySQLDialect"); 
      properties.put(Environment.SHOW_SQL, true); 
      return properties; 
     } 

    } 

SpringMVCConfiguration.java

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages="company.controller") 
public class SpringMVCConfiguration extends WebMvcConfigurerAdapter { 

    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    } 

    @Bean 
    public ViewResolver viewResolver() { 
     InternalResourceViewResolver viewResolverJSP = new InternalResourceViewResolver(); 
     viewResolverJSP.setOrder(1); 
     viewResolverJSP.setViewClass(JstlView.class); 
     viewResolverJSP.setPrefix("views/jsp/"); 
     viewResolverJSP.setSuffix(".jsp"); 

     return viewResolverJSP; 
    } 
} 

SpringMVCInitializer.java

public class SpringMVCInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[] {AppConfig.class, SpringMVCConfiguration.class}; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return null; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 
} 

Мои autowired из AccountDao возвращается нульПочему?, но в моем веб-приложении все работает хорошо.

Стараюсь много таких вещей, как:

  • Создать новую SessionFactory, но не работает.
  • Используется: classes = {AppConfig.class, SpringMVCConfig.class}.
  • Б: @ContextConfiguration (Инициализаторы = {SpringMVCInitializer.class}, погрузчик = AnnotationConfigContextLoader.class) броска Несоответствие типа: не удается преобразовать из класса в класс>
  • Использована @SpringApplicationConfiguration (классы = {SpringMVCInitializer.class})
+0

Привет, вы можете рассказать нам, каков ваш вопрос? – Stefan

+0

Мой autowired of accountDao возвращает null, почему? –

+0

Если в вашем дао есть еще один объект, вы должны определить это в своем весеннем контексте. также проверить dao пакет компонент сканирования – jdev

ответ

0

Я решил это сделать HibernateUtils, чтобы создать sessionFactory.

0

Я думаю, вам нужно установить инициализаторы вместо классов в свой класс LoadingTests.

@ContextConfiguration(initializers = {SpringMVCInitializer.class}, loader=AnnotationConfigContextLoader.class) 

Также рассмотрите возможность использования инъекции конструктора на вашем DAO.

+0

То, что происходит, когда я пытаюсь сделать это: Тип несоответствия: невозможно преобразовать из класса в класс > –

0

Поскольку у вас есть @Repository вы должны включить их

@EnableJpaRepositories(basePackages="yourrepositories") в своем классе конфигурации

+0

Какова зависимость maven от этого? –

+0

\t org.springframework \t весна-JPA \t 2.0.8 jpganz18

+0

Я не уверен, если @entities могут быть использованы без использования JPA .... – jpganz18

0

попробуйте добавить

@WebAppConfiguration 

перед проверкой класса.

Простое присутствие @WebAppConfiguration на тестовом классе гарантирует, что WebApplicationContext будет загружен для испытания с использованием по умолчанию для путь к корню веб-приложения.

Смежные вопросы