我是新人
我有配置
并尝试注入
@Controller
public class HelloController {
@Autowired
HibernateTemplate hibernateTemplate;
@RequestMapping(value = "/hello.htm", method = RequestMethod.GET)
public @ResponseBody String save() throws Exception {
hibernateTemplate.save(new Some(Long.valueOf("33"), Integer.valueOf("1"), Double.valueOf("1"), Short.valueOf("0")));
}
}
。
但是如果我尝试在其他类中使用@Autowired,我有NPE示例
public class SomeFacade extends AbstractFacade<Some> {
@Autowired
HibernateTemplate hibernateTemplate;
@Override
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
}
并在
中使用@Controller
public class HelloController {
@RequestMapping(value = "/hello.htm", method = RequestMethod.GET)
public @ResponseBody String save() throws Exception {
SomeFacade df = new SomeFacade();
HibernateTemplate ht = df.getHibernateTemplate();
}
}
我有"ht"是Null
我不知道代码中发生了什么,为什么它不工作,我认为这是因为我的类没有在xml文件中注册。请帮忙举那个例子。谢谢你!
就像@GreybeardedGeek说它需要是Spring bean。你可以在你的类中添加@Component注释,这样它就会被spring管理:
@Component
public class SomeFacade extends AbstractFacade<Some> {
@Autowired
HibernateTemplate hibernateTemplate;
@Override
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
}
不要忘记在xml文件(根上下文)中添加组件扫描,如果它还没有:
<context:component-scan base-package="your.package" />
如果你正在使用这个解决方案,注入组件而不是使用新的关键字:
@Controller
public class HelloController {
@Autowired
private SomeFacade df;
@RequestMapping(value = "/hello.htm", method = RequestMethod.GET)
public @ResponseBody String save() throws Exception {
HibernateTemplate ht = df.getHibernateTemplate();
}
}