The Atalanta attacker has completed a deadline day move to San Siro after the Rossoneri missed out on Parma's Jonathan Biabiany
The French attacker had looked set to make San Siro his home after being pictured with a Milan t-shirt and scarf earlier on Monday, but Cristian Zaccardo's decision not to move to the Ennio Tardini as part of the swap deal brought about the collapse of the ex-Inter man's transfer.
Milan moved quickly to sign a replacement, though, bringing in Bonaventura from Atalanta in a deal worth around €7m plus bonuses.
The 25-year-old is a product of the Bergamo side's youth system and played 134 games for the Orobici over a seven-year period.
He joins Fernando Torres and Marco van Ginkel at Milan, with both players having been confirmed as new signings by the club in the final days of the transfer window.