The 26-year-old Germany international had been linked with a summer move to Manchester United, with his previous deal having been due to expire at the end of next season.
"I've extended my contract and I'm staying with Bayern until 2016. Long live Bayern!" he declared on the Bayern website.
Schweinsteiger declared to the fans: "I've extended my contract for you."
The Bavarian native joined the club in 1998, winning the German under-17 and under-19 championships and starring for the reserves before securing a professional contract.