任何人都可以告诉我为什么我得到这个例外?

时间:2017-05-10 12:46:08

标签: java spring hibernate

org.springframework.beans.factory.BeanCreationException异常:错误
创建名为'myDBAuthenticationService'的bean:注入自动连接的依赖项失败;嵌套异常是Org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private org.o7planning.springmvcshopp

  

AdminController.java

package org.o7planning.springmvcshoppingcart.controller;
import java.util.List;
import org.o7planning.springmvcshoppingcart.dao.OrderDAO;
import org.o7planning.springmvcshoppingcart.dao.ProductDAO;   
import org.o7planning.springmvcshoppingcart.model.OrderDetailInfo;
import org.o7planning.springmvcshoppingcart.model.OrderInfo;
import org.o7planning.springmvcshoppingcart.model.PaginationResult;
import org.o7planning.springmvcshoppingcart.model.ProductInfo;
import org.o7planning.springmvcshoppingcart.validator.ProductInfoValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import 
org.springframework.web.multipart.support.ByteArrayMultipartFileEditor;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
// Enable Hibernate Transaction.
@Transactional
// Need to use RedirectAttributes
@EnableWebMvc
public class AdminController {

@Autowired
private OrderDAO orderDAO;

@Autowired
private ProductDAO productDAO;

@Autowired
private ProductInfoValidator productInfoValidator;

// Configurated In ApplicationContextConfig.
@Autowired
private ResourceBundleMessageSource messageSource;

@InitBinder
public void myInitBinder(WebDataBinder dataBinder) {
    Object target = dataBinder.getTarget();
    if (target == null) {
        return;
    }
    System.out.println("Target=" + target);

    if (target.getClass() == ProductInfo.class) {
        dataBinder.setValidator(productInfoValidator);
        // For upload Image.
        dataBinder.registerCustomEditor(byte[].class, new 
  ByteArrayMultipartFileEditor());
    }
}

// GET: Show Login Page
@RequestMapping(value = { "/login" }, method = RequestMethod.GET)
public String login(Model model) {

    return "login";
}

@RequestMapping(value = { "/accountInfo" }, method = RequestMethod.GET)
public String accountInfo(Model model) {

    UserDetails userDetails = (UserDetails) 
 SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    System.out.println(userDetails.getPassword());
    System.out.println(userDetails.getUsername());
    System.out.println(userDetails.isEnabled());

    model.addAttribute("userDetails", userDetails);
    return "accountInfo";
}

@RequestMapping(value = { "/orderList" }, method = RequestMethod.GET)
public String orderList(Model model, //
        @RequestParam(value = "page", defaultValue = "1") String pageStr) {
    int page = 1;
    try {
        page = Integer.parseInt(pageStr);
    } catch (Exception e) {
    }
    final int MAX_RESULT = 5;
    final int MAX_NAVIGATION_PAGE = 10;

    PaginationResult<OrderInfo> paginationResult //
    = orderDAO.listOrderInfo(page, MAX_RESULT, MAX_NAVIGATION_PAGE);

    model.addAttribute("paginationResult", paginationResult);
    return "orderList";
}

// GET: Show product.
@RequestMapping(value = { "/product" }, method = RequestMethod.GET)
public String product(Model model, @RequestParam(value = "code", 
defaultValue = "") String code) {
    ProductInfo productInfo = null;

    if (code != null && code.length() > 0) {
        productInfo = productDAO.findProductInfo(code);
    }
    if (productInfo == null) {
        productInfo = new ProductInfo();
        productInfo.setNewProduct(true);
    }
    model.addAttribute("productForm", productInfo);
    return "product";
}

// POST: Save product
@RequestMapping(value = { "/product" }, method = RequestMethod.POST)
// Avoid UnexpectedRollbackException (See more explanations)
@Transactional(propagation = Propagation.NEVER)
public String productSave(Model model, //
        @ModelAttribute("productForm") @Validated ProductInfo productInfo, 
//
        BindingResult result, //
        final RedirectAttributes redirectAttributes) {

    if (result.hasErrors()) {
        return "product";
    }
    try {
        productDAO.save(productInfo);
    } catch (Exception e) {
        // Need: Propagation.NEVER?
        String message = e.getMessage();
        model.addAttribute("message", message);
        // Show product form.
        return "product";

    }
    return "redirect:/productList";
}

@RequestMapping(value = { "/order" }, method = RequestMethod.GET)
public String orderView(Model model, @RequestParam("orderId") String 
orderId) {
    OrderInfo orderInfo = null;
    if (orderId != null) {
        orderInfo = this.orderDAO.getOrderInfo(orderId);
    }
    if (orderInfo == null) {
        return "redirect:/orderList";
    }
    List<OrderDetailInfo> details = 
 this.orderDAO.listOrderDetailInfos(orderId);
    orderInfo.setDetails(details);

    model.addAttribute("orderInfo", orderInfo);

    return "order";
}

}
  

的pom.xml

<properties>
    <java-version>1.8</java-version>
</properties>

<repositories>
    <!-- Repository for ORACLE JDBC Driver -->
    <repository>
        <id>codelds</id>
        <url>https://code.lds.org/nexus/content/groups/main-repo</url>
    </repository>
</repositories>

<dependencies>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>

    <!-- Servlet API -->
    <!-- http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -
 ->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>

    <!-- Jstl for jsp page -->
    <!-- http://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>


    <!-- JSP API -->
    <!-- http://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
        <scope>provided</scope>
    </dependency>

   <!-- Apache Commons FileUpload -->
   <!-- http://mvnrepository.com/artifact/commons-fileupload/commons-
 fileupload -->
   <dependency>
       <groupId>commons-fileupload</groupId>
       <artifactId>commons-fileupload</artifactId>
       <version>1.3.1</version>
   </dependency>        

    <!-- Spring dependencies -->
    <!-- http://mvnrepository.com/artifact/org.springframework/spring-core -
  ->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.2.5.RELEASE</version>
    </dependency>

    <!-- http://mvnrepository.com/artifact/org.springframework/spring-web --
   >
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.2.5.RELEASE</version>
    </dependency>

    <!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc 
    -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.2.5.RELEASE</version>
    </dependency>

    <!-- http://mvnrepository.com/artifact/org.springframework/spring-orm --
   >
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.2.5.RELEASE</version>
    </dependency>

    <!-- Spring Security Artifacts - START -->
    <!-- 
  http://mvnrepository.com/artifact/org.springframework.security/spring-
  security-web -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>4.0.4.RELEASE</version>
    </dependency>

    <!-- 
  http://mvnrepository.com/artifact/org.springframework.security/spring-
   security-config -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>4.0.4.RELEASE</version>
    </dependency>

    <!-- 
  http://mvnrepository.com/artifact/org.springframework.security/spring-
  security-taglibs -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
        <version>4.0.4.RELEASE</version>
    </dependency>

    <!-- Spring Security Artifacts - END -->

    <!-- Hibernate -->
    <!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.11.Final</version>
    </dependency>

    <!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-
    entitymanager -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.3.11.Final</version>
    </dependency>

   <dependency>
  <groupId>javax.transaction</groupId>
  <artifactId>jta</artifactId>
  <version>1.1</version> 
      </dependency>
    <!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>4.3.11.Final</version>
    </dependency>


    <!-- MySQL JDBC driver -->
    <!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.34</version>
    </dependency>

    <!-- Oracle JDBC driver -->
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.3</version>
    </dependency>

    <!-- SQLServer JDBC driver (JTDS) -->
    <!-- http://mvnrepository.com/artifact/net.sourceforge.jtds/jtds -->
    <dependency>
        <groupId>net.sourceforge.jtds</groupId>
        <artifactId>jtds</artifactId>
        <version>1.3.1</version>
    </dependency>

    <!-- PostgreSQL driver -->
    <!-- https://mvnrepository.com/artifact/postgresql/postgresql -->
    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.1-901-1.jdbc4</version>
    </dependency>

     <!-- Email validator,... -->
    <!-- http://mvnrepository.com/artifact/commons-validator/commons-
   validator -->
    <dependency>
        <groupId>commons-validator</groupId>
        <artifactId>commons-validator</artifactId>
        <version>1.5.0</version>
    </dependency>

   </dependencies>


  <build>
   <finalName>SpringMVCANnotationShoppingCart</finalName>
   <plugins>

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
            <source>1.8</source> <!-- yours Java version -->
            <target>1.8</target> <!-- yours Java version -->
        </configuration>
    </plugin>

   </plugins>
   </build>
</project>
  

MyDBAuthenticationService.java

    package org.o7planning.springmvcshoppingcart.authentication;
    import java.util.ArrayList;
    import java.util.List;
    import org.o7planning.springmvcshoppingcart.dao.AccountDAO;
    import org.o7planning.springmvcshoppingcart.entity.Account;
    import  org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.core.GrantedAuthority;
    import  
    org.springframework.security.core.authority.SimpleGrantedAuthority;
    import org.springframework.security.core.userdetails.User;
    import org.springframework.security.core.userdetails.UserDetails;
    import org.springframework.security.core.userdetails.UserDetailsService; 
    import   
    org.springframework.security.core.userdetails.UsernameNotFoundException;
   import org.springframework.stereotype.Service;

 @Service
public class MyDBAuthenticationService implements UserDetailsService {

@Autowired
private AccountDAO accountDAO;

@Override
public UserDetails loadUserByUsername(String username) throws 
UsernameNotFoundException {
    Account account = accountDAO.findAccount(username);
    System.out.println("Account= " + account);

    if (account == null) {
        throw new UsernameNotFoundException("User " //
                + username + " was not found in the database");
    }

    // EMPLOYEE,MANAGER,..
    String role = account.getUserRole();

    List<GrantedAuthority> grantList = new ArrayList<GrantedAuthority>();

    // ROLE_EMPLOYEE, ROLE_MANAGER
    GrantedAuthority authority = new SimpleGrantedAuthority("ROLE_" + role);

    grantList.add(authority);

    boolean enabled = account.isActive();
    boolean accountNonExpired = true;
    boolean credentialsNonExpired = true;
    boolean accountNonLocked = true;

    UserDetails userDetails = (UserDetails) new User(account.getUserName(), 
//
            account.getPassword(), enabled, accountNonExpired, //
            credentialsNonExpired, accountNonLocked, grantList);

    return userDetails;
}

}
  

AplicationContextConfig.java

 package org.o7planning.springmvcshoppingcart.config;
 import java.util.Properties;
 import javax.sql.DataSource;
 import org.hibernate.SessionFactory;
import org.o7planning.springmvcshoppingcart.dao.AccountDAO;
import org.o7planning.springmvcshoppingcart.dao.impl.AccountDAOImpl;
import org.o7planning.springmvcshoppingcart.dao.OrderDAO;
 import org.o7planning.springmvcshoppingcart.dao.impl.OrderDAOImpl;
import org.o7planning.springmvcshoppingcart.dao.ProductDAO;
import org.o7planning.springmvcshoppingcart.dao.impl.ProductDAOImpl;
 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import 
org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@ComponentScan("org.o7planning.springmvcshoppingcart.*")
@EnableTransactionManagement
// Load to Environment.
@PropertySource("classpath:ds-hibernate-cfg.properties")
public class ApplicationContextConfig {

// The Environment class serves as the property holder
// and stores all the properties loaded by the @PropertySource
@Autowired
private Environment env;

@Bean
public ResourceBundleMessageSource messageSource() {
    ResourceBundleMessageSource rb = new ResourceBundleMessageSource();
    // Load property in message/validator.properties
    rb.setBasenames(new String[] { "messages/validator" });
    return rb;
}

@Bean(name = "viewResolver")
public InternalResourceViewResolver getViewResolver() {
    System.out.println("Executing intervnal view Resolver");
    InternalResourceViewResolver viewResolver = new 
InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/pages/");
    viewResolver.setSuffix(".jsp");
    return viewResolver;
}

// Config for Upload.
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver commonsMultipartResolver = new 
CommonsMultipartResolver();

    // Set Max Size...
    // commonsMultipartResolver.setMaxUploadSize(...);

    return commonsMultipartResolver;
}
@Autowired    
@Bean(name = "dataSource")
public DataSource getDataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();

    // See: ds-hibernate-cfg.properties
    dataSource.setDriverClassName(env.getProperty("ds.database-driver"));
    dataSource.setUrl(env.getProperty("ds.url"));
    dataSource.setUsername(env.getProperty("ds.username"));
    dataSource.setPassword(env.getProperty("ds.password"));

    System.out.println("## getDataSource: " + dataSource);

    return dataSource;
}


@Bean(name = "sessionFactory")
public SessionFactory getSessionFactory(DataSource dataSource) throws 
Exception {
    Properties properties = new Properties();
 System.out.println("Datasource");
    // See: ds-hibernate-cfg.properties
    properties.put("hibernate.dialect", 
 env.getProperty("hibernate.dialect"));
    properties.put("hibernate.show_sql", 
 env.getProperty("hibernate.show_sql"));
    properties.put("current_session_context_class", 
 env.getProperty("current_session_context_class"));


    LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();

    // Package contain entity classes
    factoryBean.setPackagesToScan(new String[] {   
    "org.o7planning.springmvcshoppingcart.entity" });
    factoryBean.setDataSource(dataSource);
    factoryBean.setHibernateProperties(properties);
    factoryBean.afterPropertiesSet();
    //
    SessionFactory sf = factoryBean.getObject();
    System.out.println("## getSessionFactory: " + sf);
    return sf;
}

@Autowired
@Bean(name = "transactionManager")
public HibernateTransactionManager getTransactionManager(SessionFactory 
sessionFactory) {
    HibernateTransactionManager transactionManager = new 
HibernateTransactionManager(sessionFactory);

    return transactionManager;
}

@Bean(name = "accountDAO")
public AccountDAO getApplicantDAO() {
    return new AccountDAOImpl();
}

@Bean(name = "productDAO")
public ProductDAO getProductDAO() {
    return new ProductDAOImpl();
}

@Bean(name = "orderDAO")
public OrderDAO getOrderDAO() {
    return new OrderDAOImpl();
}

@Bean(name = "accountDAO")
public AccountDAO getAccountDAO()  {
    return new AccountDAOImpl();
}

}

1 个答案:

答案 0 :(得分:0)

请在pom.xml中使用Hibernate 5:

 <!-- Hibernate -->
<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.2.10.Final</version>
</dependency>

<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.2.10.Final</version>
</dependency>


<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>5.2.10.Final</version>
</dependency>