Once-in-a-year bonuses give very little incentive to produce efficient work day-to-day. Because bonuses are given far in the future, employees have little to no rapid feedback on their work; and being far in the future some employees simply forget about them (or believe they might change jobs before bonuses are given so why work hard anyway).
Giving weekly or monthly bonus would give a rapid a powerful feedback to employees; and bonuses would be much connected to actual work than the corporate politics that happen just before the yearly bonus.
Another thing that employers risk with this policy is employees leaving en-masse as soon as the bonus is given. Some consulting/audit companies give bonus after the summer, just before their busy season starts; and employers learn the hard way that giving the bonus as late as possible is not as smart as it first sounded.