如何从Java类调用spring组件

时间:2014-09-25 13:28:12

标签: java spring spring-mvc

我有一个来自JDBCTemplate的rowcallBackHandler,但是当我使用new运算符时,我无法在rowbackhandler中获得任何Spring组件。基本上,我需要迭代大结果集。

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

2 个答案:

答案 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,然后调用getBeanbean id传递给您application-context.xml中声明的ApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml"); Foo foo = ctx.getBean("beanId", Foo.class); 。 E.g。

{{1}}