trubosun 2016-10-21 14:24 采纳率: 50%
浏览 1120

为什么相似的bean有一个没有被注入到ioc容器里面?

如题,直接上代码:
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;
}

/**

  • @author sunlong
  • @param hql:传入的hql,可以带参数?
  • @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);

}

  • 写回答

2条回答 默认 最新

  • trubosun 2016-10-21 14:24
    关注

    配置文件:

    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> 
    

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题