Johnson played five seasons in Cincinnati, but took $16 million to play in Tampa Bay last season and recorded a meager four sacks and 27 tackles.
MORE: Team-by-team free agent signings | Ngata: Rice would be ‘great addition’
Johnson picked the Bengals over the Minnesota, where he visited Saturday.
Chris Tomasson of the St. Paul Pioneer Press reported contract details.
The 28-year-old registered 11.5 sacks with the Bengals in 2012. Without Johnson in 2013, the Bengals finished 30th in the league with only 23 sacks.