gpt4 book ai didi

java - Spring使用运行时对象设置属性?

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:42 24 4
gpt4 key购买 nike

我很难弄清楚如何借助 spring 注释来设置属性。

我有一个抽象基类。

abstract class AbstractTest{
private static Session session;

@BeforeClass
public static void initApplication() throws Exception {
session = new Session();
...
}

public Session getSession(){

我有一个测试类扩展了我的 AbstractTest。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class RealTest extends AbstractTest{

@Autowired
Service service;

我有一个服务需要使用 session 对象,并且我希望它“自动设置”到 session 对象。

public class ServiceImpl implements Service {

// @AutoSomething how to make this work?
private Session session;

由于 @ContextConfiguration 注释,Spring 文件自动用于我的 RealTest

<bean id="Service" class="...ServiceImpl" >
<property name="session">
getSession()?? // What's the syntax or how to do this?
</property>

最佳答案

  1. 阅读 bean scopes 。您尝试进行的那种注入(inject)并没有真正意义。您不应该将 session 本身注入(inject)业务服务类。您应该使用session相反,作用域 bean。

  2. 测试类本身不是测试ApplicationContext的一部分,因此您无法将测试类中创建的值自动连接到测试类。无论如何,你为什么要这么做?您已经在测试类中拥有它,那么为什么不在 @Before public void setUp() {} 中使用简单的 setter 呢?方法?或者参见下一点。

  3. 如果您的类在测试类中创建了依赖项,则 @ContextConfiguration在这里没有任何帮助。您可以使用AnnotationConfigApplicationContext通过在测试类内部创建一个内部 @Configuration类并使用 Spring Java Config 配置服务类.

即:

@ContextConfiguration
public class RealTest extends AbstractTest {

@Autowired
private ApplicationContext appCtx;

private Service service;

@Before
public void setUp() {
AnnotationConfigApplicationContext testCtx = new AnnotationConfigApplicationContext();
testCtx.setParent(this.appCtx);
testCtx.register(RealTestCfg.class);
testCtx.refresh();

this.service = BeanFactoryUtils.beanOfType(testCtx, Service.class);
}

@Configuration
public static class RealTestCfg {

@Bean
public Session session() {
return AbstractTest.session;
}

@Bean
public Service service() {
return new Service();
}
}
}

@ContextConfiguration和家长ApplicationContext如果您没有任何其他依赖项,则它是可选的。和AbstractTest.session需要是protected static ,或者有protected static访问器。

关于java - Spring使用运行时对象设置属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7347298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com