在基于注释的配置中使用 <context:component-scan base-package />

Using <context:component-scan base-package /> in annotation based configuration

我已经使用了不同的资源,但我仍然没有完成我的工作。这是我的 Spring 基于注释的配置:-

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan({ "org.baeldung.persistence" })
public class PersistenceJPAConfig {

@Autowired
private Environment env;

public PersistenceJPAConfig() {
    super();
}

// beans

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource());
    em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" });

    final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    em.setJpaVendorAdapter(vendorAdapter);
    em.setJpaProperties(additionalProperties());

    return em;
}

@Bean
public DataSource dataSource() {
    final DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName")));
    dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url")));
    dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user")));
    dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass")));

    return dataSource;
}

@Bean
public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) {
    final JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(emf);
    return transactionManager;
}

@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
    return new PersistenceExceptionTranslationPostProcessor();
}

final Properties additionalProperties() {
    final Properties hibernateProperties = new Properties();
    hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
    hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
    // hibernateProperties.setProperty("hibernate.globally_quoted_identifiers",
    // "true");
    return hibernateProperties;
}

}

我的控制器 class 在 org.baeldung.persistence.controller 包中,并在 class 的顶部表示为 @Controller。当我访问 URL /products 时,仍然出现 404 错误。这是我的控制器 class

@Controller
public class ProductViewController {
@RequestMapping(value = "/products", method = RequestMethod.POST)
public String create(@ModelAttribute("product") final Product product)     {
    final ProductServiceImpl productServiceImpl = new ProductServiceImpl();
    if (productServiceImpl.create(product)) {
        return "Product with product name : " + product.getProduct_name() + "Has been created";
    } else {
        return "Error while creating the product record";
    }

}

由于您的控制器 class 在 org.baeldung.persistence.controller 包中,您必须扫描此包中的组件

@ComponentScan({ "org.baeldung.persistence.controller" })

您还需要在 PersistenceJPAConfig class

中添加 @EnableWebMvc
@EnableWebMvc