Russia never threatened to produce the attacking firepower that saw them dump out Holland in the last eight, and playmaker Andrei Arshavin was an anonymous figure throughout.
Arshavin entered the game with a huge weight of expectation on his shoulders, as well as transfer interest from Barcelona, but failed to deliver.
Spain were outstanding as they inflicted another heavy defeat on Guus Hiddink's side, as they had done in the group stages and were rarely under pressure.
Veteran coach Luis Aragones now looks to have put together a side capable of ending the years of under-achievement, even making light of that injury to the influential Villa.
Spain made a positive start, with the partnership of Villa and Torres demonstrating their threat early on.
Villa slipped in Torres for a shot that was saved by Igor Akinfeev, then forced the Russia keeper into a smart save down at his post with a long-range drive.
Please turn on JavaScript.
Media requires JavaScript to play.
Guiza's glorious goal
Russia's only early effort was a free-kick from Roman Pavlyuchenko that was off target as Spain dominated territory and possession.
Villa fired in another free-kick that was saved by Akinfeev after 28 minutes, but appeared to injure himself and limped off shortly afterwards, to be replaced by Fabregas.
It was a pivotal moment, with Fabregas more than compensating for the departure of Villa by delivered a midfield master-class.
Spain took a fully-deserved lead after 50 minutes when Xavi arrived to perfection to slide home Iniesta's driven cross.
Fabregas was pulling the strings, first setting up Torres for a shot that the Liverpool striker curled off target.
Torres then slid another glorious chance wide after a fine run and cross from Sergio Ramos in what was his final contribution of a tireless performance.
He was replaced by Guiza, with Liverpool team-mate Xabi Alonso coming on for goalscorer Xavi.
And Guiza showed his prowess as a finisher when he scored Spain's second after 73 minutes, lifting Fabregas's superb pass over Akinfeev.
Fabregas was running the game, and he produced another piece of superb creation to set up Silva for a precise finish with eight minutes left.
Spain keeper Iker Casillas was finally forced into action with three minutes remaining, saving superbly from Dmitry Sychev's header.
But it was a minor interruption to Spain's path into the final, and Akinfeev had to save well from Guiza as they threatened to make their victory margin more convincing.
Russia:
Akinfeev, Aniukov, Vasili Berezutsky, Ignashevich, Zhirkov, Semak, Zyryanov, Semshov (Bilyaletdinov 56), Saenko (Sychev 57), Pavluchenko, Arshavin.
Subs Not Used: Gabulov, Malafeev, Yanbaev, Alexei Berezutsky, Adamov, Ivanov, Shirokov, Bystrov.
Booked:
Zhirkov, Bilyaletdinov.
Spain:
Casillas, Sergio Ramos, Marchena, Puyol, Capdevila, Iniesta, Xavi (Alonso 69), Senna, Silva, Villa (Fabregas 34), Torres (Guiza 69).
Subs Not Used: Palop, Reina, Albiol, Fernando Navarro, Santi Cazorla, Sergio Garcia, Arbeloa, Juanito, De la Red.
Goals:
Xavi 50, Guiza 73, Silva 82.
Att:
50,000
Ref:
Frank De Bleeckere (Belgium).
BBC Sport Player Rater man of the match:
Spain's Cesc Fabregas 8.01 (on 90 minutes).
Please note that you can still give the players marks out of 10 on BBC Sport's Player Rater after the match has finished.