日期:2014-05-17  浏览次数:20661 次

使用spring自动装配后,怎么样使用new而里面装配的属性不报空指针
使用spring自动装配后,怎么样使用new而里面装配的属性不报空指针;
如:
public class PeopleMgmtImpl extends BaseMgmt implements PeopleMgmt{

@Autowired
private PeopleDAO peopleDAO;

public void setPeopleDAO(PeopleDAO peopleDAO){
this.peopleDAO = peopleDAO;
}
如果我在其他地方new了PeopleMgmtImpl ,peopleDAO会报空指针;

有没有好的办法可以解决。不要说peopleDAO也用new,有没有其他方法

------解决方案--------------------
目测... ...没有!
------解决方案--------------------
用new关键字new出来的对象,jvm会重新分配对应的空间和指针,这完全就不受spring管理。所以spring管理的任何其它的东西你就拿不到,也就会报nullpoint错
------解决方案--------------------
既然用了spring就不能再new了。在需要PeopleMgmtImpl 的地方通过spring注入。
------解决方案--------------------
这种情况项目中都会写个SpringUtil的。直接获取,然后赋值给DAO的。
比如有些项目是封装的注入不到的,就是封装的包固定扫描。。。。
这时候就必须有个这样的Util了。

一般都是有个监听器,通过ServletContextEvent获取ApplicationContext
然后以后都可以从里面获取bean了。
------解决方案--------------------
你如果直接new那就根本没有用到spring容器,所以回报空指针,如果要获得就只有ApplicationContext ac=new Xml.....("bean.xml");这种方法了。。。,当然也要把PeopleMgmtImpl进行容器管理,,别的再没办法 了
------解决方案--------------------
自己读配置文件。解析。