The Serie A leaders said Tuesday that the 33-year-old Van Bommel has signed a contract through June 30.
"Van Bommel is an important player with international (experience)," Milan coach Massimiliano Allegri said.
"Milan took the best player available in that position." Van Bommel could make his Milan debut Wednesday in the Italian Cup quarterfinals against Sampdoria along with another newly signed Dutch international, Urby Emanuelson.
"We have two new acquisitions who could play _ one certainly," Allegri added. "We don't have any time and we haven't tried anything out but they're very experienced and skilled players and I think they can play just as well." Van Bommel's contract with Bayern had been due to expire at the end of the season.
Bayern chairman Karl-Heinz Rummenigge said the German champions granted his wish to be released early from his contract because of his services to the club.
The Dutchman joined Bayern from Barcelona in August 2006 and had been the club's captain since the 2008-09 season.
Before moving to Spain, he played for PSV Eindhoven.
He played 185 games for Bayern and scored 16 goals.
"Mark was always an exemplary professional, an important and successful player for Bayern and, beyond that, a great captain," Rummenigge said on Bayern's website.
Van Bommel said he was leaving Bayern "with a heavy heart, but with my head held high." "I spent 4½ very good and successful years here," he added.
Speculation that Van Bommel might move during the winter transfer window had flared again this week, having previously died down after his agent said last month that he would play out his contract.
Bayern, which had a disappointing first half of the season, brought in Brazilian midfielder Luiz Gustavo from Hoffenheim over the winter break.
It wasn't immediately clear who will replace Van Bommel as captain.