我有一个来自JDBCTemplate的rowcallBackHandler
,但是当我使用new
运算符时,我无法在rowbackhandler
中获得任何Spring组件。基本上,我需要迭代大结果集。
我需要在每1000条记录后调用一个方法,但是我无法调用该方法;自动装配或组件扫描不起作用。如何在普通的java类中注入一个spring bean?
答案 0 :(得分:2)
听起来您想要动态注入rowcallbackHandler,因为每次执行SQL时都会生成对象。
作为一般的最佳实践,Spring依赖注入应该只用于类似单例的对象(即Services,DAO等)。这就是对象不应该需要或使用依赖注入的回调。相反,你需要用你的callbackhandler需要连接你周围的单个类似对象(@ Service,@ Controller,@ Repository ...等),然后通过构造函数或类似常规闭包的词法范围访问依赖项(我忘记了什么它在Java中调用)。我不知道你的Java技能水平是什么,但听起来你可能不知道匿名课程。
以下是使用匿名类的示例。
@Service
public MyService {
@Autowired
JdbcTemplate template;
@Autowired
Something something;
public void doSomething() {
template.query("select * from something", new RowCallbackHandler() {
public void processRow(ResultSet rs) {
System.out.println(something);
//actually do something
}
});
}
}
话虽如此,您可以使用new Blah()
自动注入对象,但它需要@Configurable
AspectJ魔法(除非您知道自己在做什么,否则不要这样做。)
答案 1 :(得分:1)
要在普通Java类中使用spring bean,您需要ApplicationContext
,然后调用getBean
将bean id
传递给您application-context.xml
中声明的ApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml");
Foo foo = ctx.getBean("beanId", Foo.class);
。 E.g。
{{1}}