如题,直接上代码:
package com.xiaonei.action;
import java.util.HashMap;
import java.util.Map;
import org.apache.struts2.interceptor.RequestAware;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.xiaonei.domain.University;
import com.xiaonei.domain.Users;
import com.xiaonei.domain.Useruniversity;
import com.xiaonei.form.UserForm;
import com.xiaonei.service.serviceInter.CountryServiceInter;
import com.xiaonei.service.serviceInter.ProvinceServiceInter;
import com.xiaonei.service.serviceInter.UniversityServiceInter;
import com.xiaonei.service.serviceInter.UserServiceInter;
import com.xiaonei.service.serviceInter.UseruniversityServiceInter;
import antlr.collections.List;
public class RegisterAction extends ActionSupport implements RequestAware,ModelDriven {
private static final long serialVersionUID = 1L;
Map<String, Object> request = new HashMap<String, Object>();
@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
private CountryServiceInter countryService;
private ProvinceServiceInter provinceService;
private UniversityServiceInter universityService;
private UserServiceInter userService;
private UseruniversityServiceInter useruniversityService;
public CountryServiceInter getCountryService() {
return countryService;
}
public UserServiceInter getUserService() {
return userService;
}
public void setUserService(UserServiceInter userService) {
this.userService = userService;
}
public UseruniversityServiceInter getUseruniversityService() {
return useruniversityService;
}
public void setUseruniversityService(UseruniversityServiceInter useruniversityService) {
this.useruniversityService = useruniversityService;
}
public Map<String, Object> getRequest() {
return request;
}
public void setCountryService(CountryServiceInter countryService) {
this.countryService = countryService;
}
public ProvinceServiceInter getProvinceService() {
return provinceService;
}
public void setProvinceService(ProvinceServiceInter provinceService) {
this.provinceService = provinceService;
}
public UniversityServiceInter getUniversityService() {
return universityService;
}
public void setUniversityService(UniversityServiceInter universityService) {
universityService = this.universityService;
}
//转到注册页面之前要准备的数据
public String readyData(){
//准备数据,供用户选择大学
System.out.println(universityService);
System.out.println(countryService);
System.out.println(provinceService);
System.out.println(userService);
System.out.println(useruniversityService);
//显示默认国家的大学
//request.put("universityList", universityService.hashCode());
//System.out.println(universityService.findById(null, null));
//国家
//List list = (List) universityService.getResult("from University",null);
//大学名字(默认显示北京的大学)
request.put("countryList", countryService.getResult("from Country", null));
//省和直辖市的信息(默认中国)
request.put("provinceList", provinceService.getResult("from Province where country.id=?", new Object[]{ new Integer(1)} ));
return "dataIsReady";
}
universityService,countryService ,provinceService,userService
useruniversityService这些属性对应实体类都配置了相应的bean来实现ioc,可是
输出到控制台的结果是:
null
com.xiaonei.service.serviceImpl.CountryServiceImpl@309d74
com.xiaonei.service.serviceImpl.ProvinceServiceImpl@f3bb35
com.xiaonei.service.serviceImpl.UserServiceImpl@1561f65
com.xiaonei.service.serviceImpl.UseruniversityServiceImpl@84d61a
第一个为空,就是universityService对应的类没有被配置到spring的ioc容器中
而其他的都被配置到了容器中,想了很久看了好几遍配置文件都搞不懂为什么,求大神指教!
UniversityServiceImpl类:
package com.xiaonei.service.serviceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.xiaonei.service.baseService.BaseServiceImpl;
import com.xiaonei.service.serviceInter.UniversityServiceInter;
@Transactional
public class UniversityServiceImpl extends BaseServiceImpl implements UniversityServiceInter {
}
UniversityServiceInter接口类:
package com.xiaonei.service.serviceInter;
import com.xiaonei.service.baseService.BaseService;
public interface UniversityServiceInter extends BaseService{
}
BaseServiceImpl类:
package com.xiaonei.service.baseService;
import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public abstract class BaseServiceImpl implements BaseService {
@Resource
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/**
@param args: 问号对应的参数数组
*/
@Transactional
public List<?> getResult(String hql, Object[] args) {
System.out.println(hql);
Session session= sessionFactory.getCurrentSession();
System.out.println(session);
Query query = session.createQuery(hql);
System.out.println(query);
if(args!= null && args.length > 0){
for(int i = 0;i<args.length;i++){
query.setParameter(i, args[i]);
}
}
return query.list();
}
@Override
public void save(Object obj) {
// TODO Auto-generated method stub
sessionFactory.openSession().save(obj);
}
@Override
public void delete(Object obj) {
// TODO Auto-generated method stub
}
@Override
public void update(Object obj) {
// TODO Auto-generated method stub
}
@Override
public Object findById(Class<?> clazz, Serializable id) {
// TODO Auto-generated method stub
System.out.println("test");
return this.getSessionFactory().getCurrentSession().load(clazz, id);
}
}
BaseService接口类:
package com.xiaonei.service.baseService;
import java.io.Serializable;
import java.util.List;
public interface BaseService {
//通过一个hql,和传入的参数完成相应的查询任务
public List<?> getResult(String hql,Object [] args );
//保存一个对象
public void save(Object obj);
//删除一个对象
public void delete(Object obj);
//更新一个对象
public void update(Object obj);
//根据id返回一个对象
public Object findById(Class<?> clazz,Serializable id);
}
配置文件:
ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<!-- 导入资源文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置 C3P0 数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
</bean>
<!-- 配置 SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
<property name="mappingLocations" value="classpath:com/xiaonei/domain/*.hbm.xml"></property>
</bean>
<!-- 配置 Spring 的声明式事务 -->
<!-- 1. 配置 hibernate 的事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 2. 配置事务属性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="lastNameIsValid" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 3. 配置事务切入点, 再把事务属性和事务切入点关联起来 -->
<aop:config>
<aop:pointcut expression="execution(* com.xiaonei.service.*.*(..))" id="txPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 自动装配具有注解的属性 -->
<context:component-scan base-package="com.xiaonei.service"></context:component-scan>
applicationContextBean.xml
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="countryService" class="com.xiaonei.service.serviceImpl.CountryServiceImpl"></bean>
<bean id="provinceService" class="com.xiaonei.service.serviceImpl.ProvinceServiceImpl"></bean>
<bean id="userService" class="com.xiaonei.service.serviceImpl.UserServiceImpl"></bean>
<bean id="useruniversityService" class="com.xiaonei.service.serviceImpl.UseruniversityServiceImpl"></bean>
<bean id="registerAction" class="com.xiaonei.action.RegisterAction">
<property name="countryService" ref="countryService"></property>
<property name="provinceService" ref="provinceService"></property>
<!-- <property name="universityService" ref="universityService"></property> -->
<property name="userService" ref="userService"></property>
<property name="useruniversityService" ref="useruniversityService"></property>
</bean>
把项目clean下,再编译试试