问题描述
SpringMVC+hibernate在main中使用代码测试可以得到正确的对象,代码如下public static void main(String[] args) {ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");ForumService fs=(ForumService)ctx.getBean("forumService");System.out.println(fs);BoardController bc=(BoardController)ctx.getBean("boardController");System.out.println(bc+"注入了:"+bc.getForumService());}可得到bc内的forumService和fs是同一个对象,注入正常但是用tomcat启动web项目后总是提示controller内的forumService对象为NULL下面是xml配置文件<?xml version="1.0" encoding="UTF-8"?><!-- 指定Spring配置文件的Schema信息 --><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"><!-- 定义数据源Bean,使用C3P0数据源实现 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><!-- 指定连接数据库的驱动 --><property name="driverClass" value="com.mysql.jdbc.Driver" /><!-- 指定连接数据库的URL --><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/bbs" /><!-- 指定连接数据库的用户名 --><property name="user" value="root" /><!-- 指定连接数据库的密码 --><property name="password" value="19871013" /><!-- 指定连接数据库连接池的最大连接数 --><property name="maxPoolSize" value="20" /><!-- 指定连接数据库连接池的最小连接数 --><property name="minPoolSize" value="1" /><!-- 指定连接数据库连接池的初始化连接数 --><property name="initialPoolSize" value="1" /><!-- 指定连接数据库连接池的连接的最大空闲时间 --><property name="maxIdleTime" value="20" /></bean><!-- 定义Hibernate的SessionFactory --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><!-- 依赖注入数据源,注入正是上面定义的dataSource --><property name="dataSource" ref="dataSource" /><!-- mappingResouces属性用来列出全部映射文件 --><property name="mappingResources"><list><!-- 以下用来列出Hibernate映射文件 --><value>wyc/bbs/model/Board.hbm.xml</value></list></property><!-- 定义Hibernate的SessionFactory的属性 --><property name="hibernateProperties"><props><!-- 指定数据库方言 --><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><!-- 是否根据需要每次自动创建数据库 --><prop key="hibernate.hbm2ddl.auto">update</prop><!-- 显示Hibernate持久化操作所生成的SQL --><prop key="hibernate.show_sql">true</prop><!-- 将SQL脚本进行格式化后再输出 --><prop key="hibernate.format_sql">true</prop><prop key="javax.persistence.validation.mode">none</prop></props></property></bean><bean id="boardDao" class="wyc.bbs.dao.BoardDao"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean id="forumService" class="wyc.bbs.service.ForumService"><property name="boardDao" ref="boardDao"></property></bean><bean id="boardController" class="wyc.bbs.web.BoardController"><property name="forumService" ref="forumService"></property></bean></beans>
解决方案
<bean id="boardDao" class="wyc.bbs.dao.BoardDao"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="forumService" class="wyc.bbs.service.ForumService"> <property name="boardDao" ref="boardDao"></property> </bean> <bean id="boardController" class="wyc.bbs.web.BoardController"> <property name="forumService" ref="forumService"></property> </bean> BoardDao、ForumService、BoardController有没有set方法或者相应的注解
解决方案二:
可能是这个类wyc.bbs.web.BoardController中没有对应的set/get方法。。。
解决方案三:
加上组件扫描试试<context:component-scan base-package="wyc.bbs.web" />
解决方案四:
这个问题我也遇到过,后面还是让朋友帮我弄的
解决方案五:
<bean id="boardController" class="wyc.bbs.web.BoardController" scope="prototype"> <property name="forumService" ref="forumService"></property> </bean> ,试试