热门关键字:
jquery > jquery教程 > html5 > javaweb各种框架组合案例(四):maven+spring+spr…

javaweb各种框架组合案例(四):maven+spring+spr…

362
作者:管理员
发布时间:2020/3/26 10:38:07
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=1112

  javaweb各种框架组合案例(四):maven+spring+springMVC+springdatajpa(hibernate)【失败案例】

  一、失败案例

  1.控制台报错信息

  严重:Exceptionsendingcontextinitializedeventtolistenerinstanceofclassorg.springframework.web.context.ContextLoaderListener

  org.springframework.beans.factory.UnsatisfiedDependencyException:Errorcreatingbeanwithname'userServiceImpl':Unsatisfieddependencyexpressedthroughfield'userDao';nestedexceptionisorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'userDao':Invocationofinitmethodfailed;nestedexceptionisjava.util.NoSuchElementException

  atorg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)

  atorg.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)

  atorg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)

  atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)

  atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)

  atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)

  atorg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)

  atorg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)

  atorg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)

  atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)

  atorg.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)

  atorg.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)

  atorg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)

  atorg.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:443)

  atorg.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:325)

  atorg.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)

  atorg.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797)

  atorg.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291)

  atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

  atorg.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)

  atorg.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)

  atjava.util.concurrent.FutureTask.run(FutureTask.java:266)

  atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

  atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

  atjava.lang.Thread.run(Thread.java:748)

  2.初步判断

  springdatajpa无法自动实现dao层接口

  3.原因

  未知,非扫描包问题

  二、项目

  1.项目整体包结构

  2.业务

  实现一个用户具有多部手机的业务

  3.各配置文件

  (1)pom.xml

  <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.xiaog</groupId>

  <artifactId>testssdj</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>war</packaging>

  <dependencies>

  <!--spring+springmvc顶级依赖包,包含spring-webmvc、spring-aop、spring-beans、

  spring-context、spring-core、spring-jcl、spring-expression、spring-web-->

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-webmvc</artifactId>

  <version>4.3.10.RELEASE</version>

  </dependency>

  <!--spring-aop所依赖的静态代理,

  使用aop方式管理事务,在service方法执行前开启事务,

  方法执行后提交事务,方法执行失败回滚事务-->

  <dependency>

  <groupId>org.aspectj</groupId>

  <artifactId>aspectjrt</artifactId>

  <version>1.8.0</version>

  </dependency>

  <dependency>

  <groupId>org.aspectj</groupId>

  <artifactId>aspectjweaver</artifactId>

  <version>1.8.0</version>

  </dependency>

  <!--数据库方面-->

  <dependency>

  <groupId>mysql</groupId>

  <artifactId>mysql-connector-java</artifactId>

  <version>5.1.47</version>

  </dependency>

  <dependency>

  <groupId>com.alibaba</groupId>

  <artifactId>druid</artifactId>

  <version>1.1.10</version>

  </dependency>

  <!--orm框架-->

  <dependency>

  <groupId>org.hibernate</groupId>

  <artifactId>hibernate-core</artifactId>

  <version>4.2.2.Final</version>

  </dependency>

  <dependency>

  <groupId>org.hibernate</groupId>

  <artifactId>hibernate-entitymanager</artifactId>

  <version>4.2.2.Final</version>

  </dependency>

  <!--springdatajpa-->

  <dependency>

  <groupId>org.springframework.data</groupId>

  <artifactId>spring-data-jpa</artifactId>

  <version>1.11.3.RELEASE</version>

  </dependency>

  <dependency>

  <groupId>org.slf4j</groupId>

  <artifactId>slf4j-api</artifactId>

  <version>1.7.25</version>

  </dependency>

  <dependency>

  <groupId>org.slf4j</groupId>

  <artifactId>slf4j-log4j12</artifactId>

  <version>1.7.25</version>

  </dependency>

  <!--Logback-->

  <!--<dependency>

  <groupId>ch.qos.logback</groupId>

  <artifactId>logback-classic</artifactId>

  <version>0.9.19</version>

  </dependency>

  <dependency>

  <groupId>org.logback-extensions</groupId>

  <artifactId>logback-ext-spring</artifactId>

  <version>0.1.2</version>

  </dependency>

  <dependency>

  <groupId>org.slf4j</groupId>

  <artifactId>jcl-over-slf4j</artifactId>

  <version>1.6.6</version>

  </dependency>-->

  <!--jsp需要-->

  <dependency>

  <groupId>javax.servlet</groupId>

  <artifactId>servlet-api</artifactId>

  <version>3.0-alpha-1</version>

  <scope>provided</scope>

  </dependency>

  <dependency>

  <groupId>jstl</groupId>

  <artifactId>jstl</artifactId>

  <version>1.1.2</version>

  </dependency>

  </dependencies>

  <build>

  <defaultGoal>compile</defaultGoal>

  <plugins>

  <!--maven插件-->

  <plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-compiler-plugin</artifactId>

  <version>3.1</version>

  <configuration>

  <source>1.8</source>

  <target>1.8</target>

  <encoding>UTF-8</encoding>

  </configuration>

  </plugin>

  <!--tomcat插件-->

  <plugin>

  <groupId>org.apache.tomcat.maven</groupId>

  <artifactId>tomcat7-maven-plugin</artifactId>

  <version>2.1</version>

  <configuration>

  <port>9999</port>

  <path>/testssdj</path>

  <uriEncoding>UTF-8</uriEncoding>

  <finalName>testssdj</finalName>

  <server>tomcat7</server>

  </configuration>

  </plugin>

  </plugins>

  </build>

  </project>

  (2)spring-context.xml

  <?xmlversion="1.0"encoding="UTF-8"?>

  <beansxmlns="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns:tx="http://www.springframework.org/schema/tx"

  xmlns:context="http://www.springframework.org/schema/context"

  xmlns:jpa="http://www.springframework.org/schema/data/jpa"

  xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd

  http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd

  http://www.springframework.org/schema/context

  http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/data/jpahttp://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

  <!--指定连接池配置-->

  <!--dao层数据库连接部分-->

  <!--加载配置文件-->

  <context:property-placeholder

  location="classpath:jdbc.properties"/>

  <!--配置service扫描-->

  <context:component-scan

  base-package="com.xiaog.service"/>

  <!--数据库连接池-->

  <beanid="dataSource"

  class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close">

  <propertyname="driverClassName"value="${jdbc.driver}"/>

  <propertyname="url"value="${jdbc.url}"/>

  <propertyname="username"value="${jdbc.username}"/>

  <propertyname="password"value="${jdbc.password}"/>

  <!--连接池的最大数据库连接数-->

  <propertyname="maxActive"value="10"/>

  <!--最大空闲数-->

  <propertyname="maxIdle"value="5"/>

  </bean>

  <!--spring整合JPA-->

  <beanid="entityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

  <propertyname="dataSource"ref="dataSource"/>

  <propertyname="jpaVendorAdapter">

  <beanclass="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>

  </property>

  <!--配置包扫描,扫描实体-->

  <propertyname="packagesToScan"value="com.xiaog.entity"/>

  <propertyname="jpaProperties">

  <props>

  <!--生成的数据表的列的映射策略-->

  <propkey="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>

  <!--hibernate基本属性-->

  <propkey="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>

  <propkey="hibernate.show_sql">true</prop>

  <propkey="hibernate.format_sql">true</prop>

  <propkey="hibernate.hbm2ddl.auto">update</prop>

  </props>

  </property>

  </bean>

  <!--配置事务管理器-->

  <beanid="transactionManager"class="org.springframework.orm.jpa.JpaTransactionManager">

  <propertyname="entityManagerFactory"ref="entityManagerFactory"/>

  </bean>

  <!--开启事务注解-->

  <tx:annotation-driventransaction-manager="transactionManager"/>

  <!--指定SpringDataJPA要进行扫描的包,该包中的类框架会自动为其创建代理-->

  <jpa:repositoriesbase-package="com.xiaog.dao"entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>

  </beans>

  (3)spring-mvc.xml

  <?xmlversion="1.0"encoding="UTF-8"?>

  <beansxmlns="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns:context="http://www.springframework.org/schema/context"

  xmlns:mvc="http://www.springframework.org/schema/mvc"

  xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd

  http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd

  http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd">

  <!--配置controller扫描-->

  <context:component-scanbase-package="com.xiaog.controller"/>

  <!--注解驱动-->

  <mvc:annotation-driven/>

  <!--视图解析器-->

  <beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">

  <propertyname="prefix"value="/"/>

  <propertyname="suffix"value=".jsp"/>

  </bean>

  </beans>

  (4)jdbc.properties

  jdbc.driver=com.mysql.jdbc.Driver

  jdbc.url=jdbc:mysql://localhost:3306/ssdj?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8

  jdbc.username=root

  jdbc.password=root

  (5)web.xml

  <?xmlversion="1.0"encoding="UTF-8"?>

  <web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns="http://java.sun.com/xml/ns/javaee"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

  version="3.0">

  <display-name>testssdj</display-name>

  <!--spring配置文件路径-->

  <context-param>

  <param-name>contextConfigLocation</param-name>

  <param-value>classpath:spring-context.xml</param-value>

  </context-param>

  <listener>

  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

  <!--解决post乱码问题-->

  <filter>

  <filter-name>encoding</filter-name>

  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

  <!--设置编码参是UTF8-->

  <init-param>

  <param-name>encoding</param-name>

  <param-value>UTF-8</param-value>

  </init-param>

  </filter>

  <filter-mapping>

  <filter-name>encoding</filter-name>

  <url-pattern>/*</url-pattern>

  </filter-mapping>

  <!--配置SpringMvc前端控制器-->

  <servlet>

  <servlet-name>spring-mvc</servlet-name>

  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

  <!--指定SpringMvc配置文件-->

  <init-param>

  <param-name>contextConfigLocation</param-name>

  <param-value>classpath:spring-mvc.xml</param-value>

  </init-param>

  </servlet>

  <servlet-mapping>

  <servlet-name>spring-mvc</servlet-name>

  <url-pattern>/</url-pattern>

  </servlet-mapping>

  <!--添加日志监听器-->

  <!--<context-param>

  <param-name>logbackConfigLocation</param-name>

  <param-value>classpath:logback.xml</param-value>

  </context-param>

  <listener>

  <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>

  </listener>-->

  <welcome-file-list>

  <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

  </web-app>

  4.实体层

  packagecom.xiaog.entity;

  importjavax.persistence.Entity;

  importjavax.persistence.GeneratedValue;

  importjavax.persistence.GenerationType;

  importjavax.persistence.Id;

  importjavax.persistence.Table;

  @Entity

  @Table(name="phone")

  publicclassPhone{

  @Id

  @GeneratedValue(strategy=GenerationType.IDENTITY)

  privateIntegerid;

  privateStringbrand;//品牌

  publicIntegergetId(){

  returnid;

  }

  publicvoidsetId(Integerid){

  this.id=id;

  }

  publicStringgetBrand(){

  returnbrand;

  }

  publicvoidsetBrand(Stringbrand){

  this.brand=brand;

  }

  @Override

  publicStringtoString(){

  return"Phone[id="+id+",brand="+brand+"]";

  }

  }

  packagecom.xiaog.entity;

  importjava.util.List;

  importjavax.persistence.Entity;

  importjavax.persistence.GeneratedValue;

  importjavax.persistence.GenerationType;

  importjavax.persistence.Id;

  importjavax.persistence.JoinColumn;

  importjavax.persistence.OneToMany;

  importjavax.persistence.Table;

  @Entity

  @Table(name="user")

  publicclassUser{

  @Id

  @GeneratedValue(strategy=GenerationType.IDENTITY)

  privateIntegerid;

  privateStringusername;

  privateStringpassword;

  @OneToMany(targetEntity=Phone.class)

  @JoinColumn(name="user_id")

  privateList<Phone>phones;//一个用户拥有多部手机

  publicIntegergetId(){

  returnid;

  }

  publicvoidsetId(Integerid){

  this.id=id;

  }

  publicStringgetUsername(){

  returnusername;

  }

  publicvoidsetUsername(Stringusername){

  this.username=username;

  }

  publicStringgetPassword(){

  returnpassword;

  }

  publicvoidsetPassword(Stringpassword){

  this.password=password;

  }

  publicList<Phone>getPhones(){

  returnphones;

  }

  publicvoidsetPhones(List<Phone>phones){

  this.phones=phones;

  }

  @Override

  publicStringtoString(){

  return"User[id="+id+",username="+username+",password="+password+",phones="+phones+"]";

  }

  }





如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:html
友荐云推荐