繁体   English   中英

如何从Java类调用spring组件

[英]how to invoke a spring component from Java class

我有一个rowcallBackHandler从JdbcTemplate的,但我使用new运营商,我不能够获得内部的任何Spring组件rowbackhandler 基本上,我需要迭代大结果集。

我需要在每1000条记录后调用一个方法,但是我无法调用该方法; 自动装配或组件扫描不起作用。 如何在普通的java类中注入spring bean?

听起来您想要动态注入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魔法(除非你知道你在做什么,否则不要这样做)。

要在普通的Java类中使用spring bean,需要ApplicationContext ,然后调用getBean ,将你在application-context.xml声明的bean id传递给它。 例如

ApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml");
Foo foo = ctx.getBean("beanId", Foo.class);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM