我发现答案说可以在行映射器内自动连线,
如果希望 ScoreMapper 实例将 ScoreCreator scoreCreator 注入 Spring bean,则 ScoreMapper 实例本身必须是 Spring bean,即由 Spring 创建和管理
或者通过添加@Component
您可以将 PersonUtility 类定义为在类上添加@component的 Spring Bean。
但目前 RowMapper 是用jdbcTemplate.query
中的new
实例化的:
jdbcTemplate.query(SQL, new Object[] {}, new MyRowMapper())
而且我无法在内部自动连接Spring托管的对象映射器
public class MyRowMapper implements RowMapper<Map<Integer, Type>> {
@Autowired
@Qualifier("myObjectMapper")
ObjectMapper objectMapper;
我应该如何重构当前代码来管理 Bean 行映射器?
RowMapper 是一个线程安全类。这意味着,它的单个实例可以在多个线程之间共享。所以,这意味着,你可以让它成为一个单例类,让 spring 处理它的生命周期(使用像 @Component 这样的注释之一(。无论您想在哪里使用它的实例,只需自动连接/注入现有实例,而不是每次都实例化它(new
(
@Component
public class MyRowMapper implements RowMapper<Map<Integer, Type>> {
@Autowired
@Qualifier("myObjectMapper")
ObjectMapper objectMapper;
然后
class ASingletonClass(){
@Autowired MyRowMapper myRowMapper;
public MyRowMapper myAweSomeMethod(){
return jdbcTemplate.query(SQL, new Object[] {}, myRowMapper)
}
}
请参考此答案。它有类似的路线