我希望能够在调用new()创建的实例中自动生成通用DAO服务.在我的java代码中。我理解@configurable是查看今年春天的医生的正确方法。
这是我的类代码
@Configurable(dependencyCheck=true)
public class DynVdynOperationsImpl implements DynVdynOperations {
@Autowired
private DynVdynInDbDao vdynDao;我想在Junit测试和spring测试中使用它,如下所示
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { xxx.MainConfig.class })
@ActiveProfiles({ "database-test", "classpath" })
public class DynVdynOperationsImplTest {
@Test
public void testSend() {
underTest = new DynVdynOperationsImpl();
underTest.sendVdyn("0254", null, null);
... }主配置类如下所示,
@Configuration
@EnableSpringConfigured
@ComponentScan(basePackages = {xxx })
public class MainConfig {
...
@Bean
@Scope("prototype")
public DynVdynOperations vdynOperations () {
return new DynVdynOperationsImpl();
}执行测试时,欠测试的vdynDao属性不能正确自动显示,并且仍然为空。看看这个类似的问题,我可能忽略了配置中有关AspectJ的内容。
有什么简单的方法让它发挥作用吗?也就是说,在创建对象时,我不想用锤子杀死苍蝇,而是在代码中插入刀?可能是直接从@Service对象中的代码调用spring工厂吗?
发布于 2016-07-12 07:01:18
这里似乎是最好和简单的方法来做到这一点。避免了使用AspectJ的复杂性。
配置类很好。每次我们要求Spring获得这个类的bean时,用@Scope("prototype")声明bean都会确保创建了一个新实例。
在测试类中,请让Spring容器使用应用程序上下文生成bean:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { xxx.MainConfig.class })
@ActiveProfiles({ "database-test", "classpath" })
public class DynVdynOperationsImplTest {
@Autowired
ApplicationContext context;
@Test
public void testSend() {
underTest = context.getBean(DynVdynOperations.class);
underTest.sendVdyn("0254", null, null);
... }发布于 2016-07-08 13:58:27
尝试在DynVdynOperationsImpl的类定义上添加一个@Scope("prototype")。
此外,我认为您需要命名bean,而不是“新DynVdynOperationsImpl”(即),然后使用: applicationContext.getBean("DynVdynOperations")创建它的一个新实例。使用getBean将告诉Spring处理它找到的连接。
https://stackoverflow.com/questions/38268104
复制相似问题