我有一个类,里面要调用我的写好的一个接口实现类,这个类用spring注入public interface IBpipUserBus {
public List<BpipUser> getUsersByDept(String deptId);
public void showMsg();
}
public class BpipUserImpl implements IBpipUserBus { private IBpipUserDao userDao;
private String msg;

public void setMsg(String msg) {
this.msg = msg;
}
public List<BpipUser> getUsersByDept(String deptId) {
if(userDao == null){
System.out.println("a");
}else{
System.out.println("b");
}
// TODO Auto-generated method stub
return userDao.getUsers(deptId);
} public void showMsg(){
if(msg == null){
System.out.println("aa");
}else{
System.out.println("bb");
}
System.out.println(this.msg);
}

public void setUserDao(IBpipUserDao userDao) {
this.userDao = userDao;
}}
applicationContext.xml配置如下<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
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-2.5.xsd"><!-- 配置sessionFactory --> 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>

   
    <bean id="userBus" class="cn.ls.sys.bus.impl.BpipUserImpl"> <!--  -->
     <property name="userDao" ref="userDao"/>
     <property name="msg"  value="OK!"></property>
    </bean>
    <bean id="userDao" class="cn.ls.sys.dao.impl.BpipUserImpl">
  <property name="baseDao" ref="baseDaoImpl"/>
 </bean>
 <bean id="baseDaoImpl" class="cn.util.BaseDaoImpl">
  <property name="sessionFactory" ref="sessionFactory"/>
 </bean></beans>
测试代码:
public class userTest{ public static void main(String[] args){
BeanFactory factory = new ClassPathXmlApplicationContext("classpath:../applicationContext.xml");

IBpipUserBus bpipUserBus = (IBpipUserBus)factory.getBean("userBus1");

//IBpipUserBus bpipUserBus = (IBpipUserBus)BeanUtils.getSpringBean("userBus1");
bpipUserBus.showMsg();
bpipUserBus.getUsersByDept("");
}
}
测试代码均能正常使用,现请教各位,,这个注入的类(BpipUserImpl)在web项目中如何实例化并调用呢,,比如说在jsp页面上,目前我在jsp页面用 IBpipUserBus bpipUser = new BpipUserImpl();
 bpipUser.showMsg();
 bpipUser.getUsersByDept("");试了,结果错误提示空指针异常,即需要注入的属性并未成功注入,

解决方案 »

  1.   

    考我也遇到这个问题了,刚搜到楼主的帖子居然没解决 shit·····
      

  2.   


    解决了 获取当前容器
    WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
    userBus1= (BpipUserImpl) context.getBean("userBus1");
      

  3.   

    已经在spring容器初始化的东西你不必在new出来了、你只需要“拿”出来、IBpipUserBus bpipUser = SpringContextHolder.getBean(IBpipUserBus.class);
      

  4.   

    回复#3:
    WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
     userBus1= (BpipUserImpl) context.getBean("userBus1"); 
    和IBpipUserBus bpipUser = new BpipUserImpl();比起来,都是实例化,用了Spring框架之后他有什么特点吗?
      

  5.   

    通过beanFactory.getBean,除非你的web框架支持帮你自动注入
      

  6.   

    自动注入啊?那最好了,如何自动注入呢?
    看了这个帖子我改成这样了 MessageService messageService = (MessageSerImpl)ContextLoader.getCurrentWebApplicationContext().getBean("messageService");
    MessageSerImpl里面有个
    @Resource(name="messageDao")
    private MessageDao messageDao;
    这个可以自动注入但是,第一个也就是MessageService messageService用相同的方式无法自动注入
    我理解为只要第一个手工注入后,后续的都可以自动注入
    求指点