我很难弄清楚如何在弹簧注释的帮助下设置属性。
我有一个抽象的基类。
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;
我有一个需要使用会话对象的服务,我希望它能够“自动设置”到会话对象。
public class ServiceImpl implements Service {
// @AutoSomething how to make this work?
private Session session;
由于@ContextConfiguration Annotation自动用于我的RealTest的弹簧文件
<bean id="Service" class="...ServiceImpl" >
<property name="session">
getSession()?? // What's the syntax or how to do this?
</property>
答案 0 :(得分:1)
了解bean scopes。它并没有真正成为你试图做的那种注射。您不应将会话本身注入业务服务类。您应该使用session
范围的bean。
测试类本身不是测试ApplicationContext的一部分,因此您不能将测试类中创建的值自动装配到测试类。无论如何,你为什么要那样做?你已经在 测试类中了,所以为什么不在@Before public void setUp() {}
方法中使用简单的setter?或者看下一点。
如果你有在测试类中创建了dependecies的类,那么@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
访问者。