关于Spring的@Autowired和Wicket的@SpringBean

时间:2014-01-02 13:46:39

标签: spring annotations wicket

我目前正在考虑将Mockito和JUnit集成到我的Wicket / Spring / Hibernate项目中,并找到了如何使用注释来完成此操作的教程。

麻烦是我对@Autowired不熟悉,看了谷歌之后我发现很难看出这个注释和@SpringBean注释之间的区别。

他们是同一个人还是我应该注意的差异?

我的代码为这个问题提供了一些背景信息:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
@TransactionConfiguration(transactionManager = "txManager", defaultRollback = false) 
public class TestHome
{
private WicketTester tester;

@Autowired
private ApplicationContext ctx;

@Autowired
private WebApplication webApplication;

@Before
public void setUp() {
    tester = new WicketTester(webApplication);
}

@Test
@Transactional
@Rollback(true)
public void testRenderHomePage() {
    tester.startPage(Home.class);
    tester.assertRenderedPage(Home.class);
    tester.assertComponent("home", Home.class);
}

}

1 个答案:

答案 0 :(得分:5)

如果使用Wicket SpringComponentInjector,它会使用自己的注入。 @Autowired注释是一个Springframework注释,但Wicket SpringComponentInjector忽略了这一点。因此,Wicket注释是@SpringBean,它标记了Spring bean或必须存在于Spring上下文中的组件自动装配(注入)的字段。

在你的代码片段中,你使用SpringJUnit4ClassRunner运行器,所以你的字段是由Spring注入的,所以它是正确的。

查看示例,如何在How can I get a Spring bean injected in my custom Wicket model class?

使用SpringComponentInjector