其他类中的Spring和Hibernate注入



我是新人

我有配置

并尝试注入

@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();
    }
}

最新更新