The 2012 season has been wildly disappointing for the Buffalo Bills, but it’s to their credit that they didn’t run for the bus with nothing on the line in a meaningless season finale (unlike the opposing New York Jets). The Bills won 28-9 in their final game of the year.

Offense: B

RB C.J. Spiller and WR Stevie Johnson -- Buffalo’s top two offensive playmakers -- stepped up when called upon against the Jets. Spiller had 131 yards from scrimmage, which included a 66-yard reception for a touchdown to give the Bills a 14-9 lead. The play was all Spiller’s doing as he took a simple short pass up the middle of the field and into the end zone. Even with QB Ryan Fitzpatrick struggling (12 of 26, 225 yards, TD), Johnson found a way to make big plays in the downfield passing game. He had a tremendous leaping 37-yard grab down the right sideline and finished with 111 yards on six receptions. Johnson became the first Bills' WR to have three consecutive 1,000-yard seasons. Previous game’s grade: D

Defense: B

The Jets were atrocious on offense against the Bills, but Buffalo’s defense still made a couple big plays. LB Bryan Scott gave the Bills a 7-3 lead with his 20-yard interception return in the first quarter on an awful throw from Jets QB Mark Sanchez. Buffalo’s porous run defense had a difficult first half and allowed 133 rushing yards in the game. DE Shawne Merriman was a surprise starter opposite Mario Williams and hammered Sanchez with a big hit on a long completion. Rookie LB Nigel Bradham also had a big hit on Jeremy Kerley and tied for the team lead in tackles with 11. Previous game’s grade: F

Special teams: B

If there were power rankings for blocking field goals, the Bills would be at the top of the list. The Bills blocked two field goals Sunday, giving them six blocked kicks (five field goals, an extra point). Alex “Megahand” Carrington had his fifth block and Marcell Dareus had his first this season. The Bills came close to breaking a few big gains in the return game. P Shawn Powell had a nice 51-yard punt that landed out of bounds and finished with a net of 39.2 yards per attempt. Previous game’s grade: C-

Coaching: B

The Bills gave Spiller his largest workload of the year with a season-high 24 carries. It's about time. Although Spiller finished with 59 yards rushing, he should have been getting around 25 carries per game all season. It only takes one play for Spiller to make an impact, which he did with his 66-yard reception for a touchdown in the second quarter. Unfortunately for coach Chan Gailey, the realization that he must ride his most explosive player came far too late -- if (or when) Gailey is fired, one of his enduring legacies will be his use of Spiller -- or lack thereof. Even the oft-criticized wildcat worked in this game. Former Jet Brad Smith had a 4-yard score in the fourth quarter to give Buffalo a 21-9 lead. Previous game’s grade: F

For more updates on the Bills, follow correspondent Mark Ludwiczak on Twitter@CBSBills and @MarkLud12.