【发布时间】:2015-10-07 08:16:23
【问题描述】:
我有一个像下面这样的课程:
package com.company.data.render.model
@RestController
public class ControllerClass {
@Autowired
ApplicationPropertiesServiceImpl services;
@RequestMapping(value = "/node1", method = RequestMethod.GET)
@ResponseBody
public ParentNode getNode1()
{
Child node = new Child();
List<Map<String, Object>> properties properties = services.getData("A",xxx);
node.addtree();
node.setProperties(properties);
return node;
}
} -------------------------------------------------------------------------------
package com.company.data.service;
@Component
public List<Map<String, Object>> getData(String type,String name)
{
if(type.equalsIgnoreCase("A"))
{
String sql = "select * from data.data_properties(?)";
List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql,host);
return rows;
}else if(properties.equalsIgnoreCase("B"))
{
String sql = "select * from data.application_properties(?)";
List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql,host);
return rows;
}
}
-------------------------------------------------------------------------------
package com.company.data.render.model;
@Component
public class Child {
@Autowired
ApplicationPropertiesServiceImpl services;
public void addtree()
{
List<Map<String, Object>> properties=services.getData("B", "xxy");
}
}
如何访问 Child 类中的 getdata() 函数。虽然我有 service 对象,但我得到空指针异常strong>自动装配 ApplicationPropertiesServiceImpl
【问题讨论】:
-
您拼错了注释,它应该是
@Autowired。但是,将控制器连接到另一个组件是一个坏主意。如果您将公共代码提取到单独的@Servicebean 中并从控制器和您的Child类中引用该 bean 会更好。当然,您还必须正确设置应用程序上下文并对其进行初始化。 -
最好把逻辑分开,目前你的控制器做的事情太多了。我建议你做 2 个类:一个服务和一个 DAO(存储库)。存储库将为您提供 db 的结果。并且服务会有DAO对象+一些业务。两个控制器都将自动连接服务。
-
@korogue --即使我创建了一个单独的类..我将如何在两个类中获得相同的服务对象??
-
使用注解@Autowired
标签: java spring spring-boot