我有一个接受以下构造函数的类
public Student(int id, String name, Map<String, List<String>> mapInject) {
super();
this.id = id;
this.name = name;
this.mapInject = mapInject;
}
然后从spring Java Config中,我像下面那样注入构造函数args。
@Configuration
public class JavaConfig {
@Bean
public Employee getEmployeeBean() {
Map<String,List<String>> mapInject = new HashMap<String,List<String>>();
//Add map element
return new Employee(3123,"John",mapInject);
}
}
我在这里进行构造函数注入吗?这是正确的方法吗?
答案 0 :(得分:1)
除非您希望所有员工具有相同的ID和名称,否则我不会使用Spring来处理此bean。
Spring的强大功能是其依赖关系注入(Dependency Injection,DI),您可以在其中为提供程序(例如数据库管理器,服务等)定义bean,并将其注入到组件中。像您一样定义@Bean
毫无用处,因为现在您只能注入ID为3123且名称为John的员工。
重要的是要理解,仅仅因为您正在使用Spring,并不意味着一切都需要作为bean处理-您将始终需要标准的POJO来容纳和传递状态(例如Employee类),而这不会不需要和Spring有任何关系。
例如,您可能有一个EmployeeService,其中包含用于从数据库等中获取员工的业务逻辑,然后可以将其配置为Bean,以便将其注入整个应用程序中。
编辑
@Configuration
public class JavaConfig {
@Bean
@Autowired //assuming a sessionfactory been is configured elsewhere
public EmployeeService employeeService(final SessionFactory sessionfactory) {
return new EmployeeService(sessionFactory);
}
}
然后您可以将其注入到任何地方(例如在控制器中):
@RestController
public class EmployeeController {
private final EmployeeService employeeService;
@Autowired
public EmployeeController(final EmployeeService employeeService) {
this.employeeService = employeeService;
}
}
在EmployeeController不需要知道或关心userService是否具有数据库连接的情况下,也不需要担心对其进行配置,因为Spring会处理所有这些连接。