Tag: 自动assembly

如何自动assemblySpring TaskExecutor创建的线程?

根据Spring的文档 ,使用TaskExecutor的方法如下: import org.springframework.core.task.TaskExecutor; public class TaskExecutorExample { private class MessagePrinterTask implements Runnable { private String message; public MessagePrinterTask(String message) { this.message = message; } public void run() { System.out.println(message); } } private TaskExecutor taskExecutor; public TaskExecutorExample(TaskExecutor taskExecutor) { this.taskExecutor = taskExecutor; } public void printMessages() { for(int i = 0; i < 25; i++) […]

按类型划分的弹簧布线比按名称布线要慢

在我的项目中,我正在尝试迁移所有用法 Foo foo = (Foo) beanFactory.getBean(“name”); 成 Foo foo = beanFactory.getBean(Foo.class); 好处是显而易见的:类型安全性,较少复杂的代码,较少的无用常量等。通常,这些线路位于静态遗留环境中,其中这种布线是唯一的选择。 这一切都很好,直到有一天用户开始抱怨来自Spring internals的缓慢。 所以我启动了一个分析器来找到一个热点 org.springframework.beans.factory.support.AbstractBeanFactory::doGetBean(String, Class, Object[], boolean) 这是一个昂贵的电话 Class.isAssignableFrom(anotherClass) 。 我已经快速创建了一个小的性能测试,找出字符串名称和类型查找之间的速度差异是一个百日咳350次(我正在使用StaticApplicationContext进行此测试FAIW)! 在调查这一点时,我发现SPR-6870的票数很高,但由于某种原因没有得到解决。 这导致我尝试解决这个问题 , 这个问题确实显着改善了这种情况,但仍然比使用String查找要快25倍! 事实certificate,这种尝试只解决了一半的问题:它缓存bean的名称以保存在O(n)迭代上,但仍然必须调用isAssignableFrom来validation类型。 所描述的问题不仅与我的场景有关,而且也适用于使用@Autowired bean,并且在循环内创建bean的情况下可能会感觉很难。 其中一个解决方案是覆盖其中一个bean工厂方法并缓存同一类型的is-this-bean类型的检查结果,但显然这应该在Spring中完成而不是在我自己的代码中完成。 是否还有其他人遇到类似问题并找到解决方案?

如何在设置新配置后更新所有弹簧对象?

在动态配置更改后,如何刷新以前的@Autowired弹簧对象? // Here is my updateConfig method GenericApplicationContext context = new GenericApplicationContext(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(context); reader.loadBeanDefinitions(new ClassPathResource(“applicationContext.xml”)); context.refresh(); myApplicationContextAware.setApplicationContext(context); 使用myApplicationContextAware.applicationContext.getBean(MyClass.class)我可以通过新配置获取新实例,但所有@Autowired对象仍包含旧值 有没有解决弹簧对象的解决方案?

@Autowired vs @Required on setter

我很想知道这样的代码有什么区别: class MyClass { @Autowired MyService myService; } 和这样的代码: class MyClass { MyService myService; @Required public void setMyService(MyService val) { this.myService = val; } }

自动assembly时,Spring集成测试速度很慢

我正在尝试加速我们环境中的集成测试。 我们所有的课程都是自动assembly的。 在我们的applicationContext.xml文件中,我们定义了以下内容: …additional directories 我注意到Spring正在扫描上面指出的所有目录,然后迭代每个bean并缓存每个bean的属性。 (我从spring开始查看DEBUG消息) 因此,以下测试大约需要14秒才能运行: public class MyTest extends BaseSpringTest { @Test def void myTest(){ println “test” } } 有没有办法延迟加载配置? 我尝试添加default-lazy-init=”true”但这不起作用。 理想情况下,只实例化测试所需的bean。 提前致谢。 更新 :我之前应该说过,我不想为每个测试都有一个上下文文件。 我也不认为只有测试的上下文文件才有效。 (此测试上下文文件最终会包含所有内容)