本人是初学者,学习spring关于事务的两种方式,一种是基于注解,另一种是xml配置。
遇到的问题是:当不加事务时可以找到service,加了之后,两种方式都是报错找不到service,求解

解决方案 »

  1.   

    BookShopService bookShopService = ctx.getBean(BookShopService.class);这里有问题,你是按照.class获取的bean,获取的是自己原装的bookShopService,然而spring的事务机制是用动态代理返回一个代理类,这个代理类只能用id获取。所以你的代码修改为BookShopService bookShopService = ctx.getBean("bookShopService")这样试试吧
      

  2.   

    demo @Transactional
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration({"/applicationContext.xml"})
    public class UserServiceTest
    {
        @Autowired
        UserService userService;
        
        @Test
        public void test()
        {
            userService.queryAll();
        }
        
        /**
         * 事务测试(去掉@Transactional数据被插入)
         * 
         * @see [类、类#方法、类#成员]
         */
        @Test
        public void testInsert()
        {
            List<User> list = userService.queryAll();
            for (User user : list)
            {
                user.setName("username_" + RandomStringUtils.randomNumeric(2, 10));
                user.setAge(RandomUtils.nextInt(10, 60));
                userService.saveOrUpdate(user);
            }
        }
    }
      

  3.   

    demo public class MainRun
    {
        private static final Logger LOGGER = LoggerFactory.getLogger(MainRun.class);
        
        /**
         * Main
         * 
         * @param args
         * @see [类、类#方法、类#成员]
         */
        public static void main(String[] args)
        {
            GenericXmlApplicationContext context = new GenericXmlApplicationContext();
            context.setValidating(false);
            context.load("classpath*:application*.xml");
            context.refresh();
            UserService usersService = context.getBean(UserService.class);
            MeasureService measureService = context.getBean(MeasureService.class);
            LOGGER.info("data: {}", usersService.queryAll());
            LOGGER.info("--------size: {}", measureService.queryAll().size());
            try
            {
                Measure measure = new Measure();
                measure.setNo("no_" + RandomStringUtils.randomNumeric(5));
                measure.setAg(1.000);
                measureService.saveOrUpdate(measure);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            LOGGER.info("---------size: {}", measureService.queryAll().size());
            context.close();
        }
    }