我很热衷于在编译器和IDE的支持下通过移除XML文件来提升Spring3的开发效率,而这并不会改变Spring给你提供的强大的功能。
没有XML配置文件的Hibernate的单元测试是可行的,但是竟然花了我好一会才找到所有的东西,所以就在这里写下来。
我将在一个使用@Configuration注解的类中初始化所有的bean。
@Configuration @EnableTransactionManagement public class TestRepositoryConfig { @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2) .setName("Nuts").build(); } @Bean public LocalSessionFactoryBean sessionFactoryBean() { LocalSessionFactoryBean result = new LocalSessionFactoryBean(); result.setDataSource(dataSource()); result.setPackagesToScan(new String[] { "pl.squirrel.testnoxml.entity" }); Properties properties = new Properties(); properties.setProperty("hibernate.hbm2ddl.auto", "create-drop"); result.setHibernateProperties(properties); return result; } @Bean public SessionFactory sessionFactory() { return sessionFactoryBean().getObject(); } @Bean public HibernateTransactionManager transactionManager() { HibernateTransactionManager man = new HibernateTransactionManager(); man.setSessionFactory(sessionFactory()); return man; } @Bean public OrderRepository orderRepo() { return new OrderRepository(); } }
测试类是这样的:
@RunWith(SpringJUnit4ClassRunner.class) @TransactionConfiguration(defaultRollback = true) @ContextConfiguration(classes = { TestRepositoryConfig.class }) @Transactional public class OrderRepositoryTest { @Autowired private OrderRepository repo; @Autowired private SessionFactory sessionFactory; @Test public void testPersistOrderWithItems() { Session s = sessionFactory.getCurrentSession(); Product chestnut = new Product("Chestnut", "2.50"); s.save(chestnut); Product hazelnut = new Product("Hazelnut", "5.59"); s.save(hazelnut); Order order = new Order(); order.addLine(chestnut, 20); order.addLine(hazelnut, 150); repo.saveOrder(order); s.flush(); Order persistent = (Order) s.createCriteria(Order.class).uniqueResult(); Assert.assertNotSame(0, persistent.getId()); Assert.assertEquals(new OrderLine(chestnut, 20), persistent .getOrderLines().get(0)); Assert.assertEquals(new OrderLine(hazelnut, 150), persistent .getOrderLines().get(1)); } }
这里有几个需要注意的细节:
OSChina.NET原创翻译/原文链接
事务管理,数据库之类的也用配置文件?######Spring非但提供了事务管理,还提供了 身份验证、控制访问、远程服务等等。。。至于用不用Spring的配置文件嘛,就另说了,肯定有人用嘛。。~~######对于需要大量地址和参数等配置的项目来说,用class代替xml纯找抽 玩玩还是可以的######为什么要无xml配置呢?本来改动不需要编译 现在改动需要编译会好点?######好######用javaconfig宣称无xml######如果是多人开发,还是有特定的xml为好,完全注解,只适合一人开发######这个用着简单,但不爽######annotation+xml结合用,还是很不错的,你这个略显蛋疼了,测试还OK######留着备用
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。