当前位置:编程学习 > JAVA >>

spring 如何在普通类中调用注入的对象

我有一个类,里面要调用我的写好的一个接口实现类,这个类用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("");

试了,结果错误提示空指针异常,即需要注入的属性并未成功注入, --------------------编程问答-------------------- 考我也遇到这个问题了,刚搜到楼主的帖子居然没解决 shit····· --------------------编程问答--------------------
解决了 获取当前容器
WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
userBus1= (BpipUserImpl) context.getBean("userBus1"); --------------------编程问答-------------------- 已经在spring容器初始化的东西你不必在new出来了、你只需要“拿”出来、

IBpipUserBus bpipUser = SpringContextHolder.getBean(IBpipUserBus.class);
--------------------编程问答-------------------- 回复#3:
WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
 userBus1= (BpipUserImpl) context.getBean("userBus1"); 
和IBpipUserBus bpipUser = new BpipUserImpl();比起来,都是实例化,用了Spring框架之后他有什么特点吗?
--------------------编程问答-------------------- 通过beanFactory.getBean,除非你的web框架支持帮你自动注入 --------------------编程问答-------------------- 自动注入啊?那最好了,如何自动注入呢?
看了这个帖子我改成这样了
	MessageService messageService = (MessageSerImpl)ContextLoader.getCurrentWebApplicationContext().getBean("messageService");

MessageSerImpl里面有个
	@Resource(name="messageDao")
private MessageDao messageDao;

这个可以自动注入但是,第一个也就是MessageService messageService用相同的方式无法自动注入
我理解为只要第一个手工注入后,后续的都可以自动注入
求指点
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,