0

我是新学科

我有配置

并尝试注入它

@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”是空的

我不知道该代码中发生了什么以及为什么它不起作用,我认为这是因为我的类没有在 xml 文件中注册。请帮助这个例子。谢谢你!

4

1 回答 1

1

就像@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" />

如果您使用此解决方案,请注入组件而不是使用 new 关键字:

@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();
    }
}
于 2013-01-07T00:23:00.430 回答