Alonso, on a four-stop strategy, finished just under 10 seconds ahead of Kimi Raikkonen to put pressure on Sebastian Vettel at the top of the drivers’ championship.
The Ferrari front-runner started brilliantly from fifth, passing Raikkonen in turn one and rounding former teammate Lewis Hamilton on the outside of turn three.
By lap 13 the Spaniard was leading, passing Mercedes’ Nico Rosberg with ease to the delight of the crowd in Barcelona.
Alonso held a ten second lead from Raikkonen with 12 laps remaining and completed a faultless race to collect his second win in Spain after victory with Renault in 2006.
Ferrari team-mate Felipe Massa, who started ninth, had sat behind Alonso at the half-way mark, but Raikkonen came out of his final pit stop flying to pip the Brazilian to second place.
Raikkonen and Vettel went wheel-to-wheel on lap 33 and the Finn’s determination saw him pass the world champion, who was warned to protect the tyres on his Red Bull.
Hamilton and Rosberg had voiced concern over their Mercedes pre-race, despite the Silver Arrows securing a third straight pole, and it proved a miserable afternoon for the Brit in particular.
Rosberg salvaged some pride as the German overcame his Mercedes’ apparent lack of pace to finish in the points with a sixth place finish.
But Hamilton, who started second on the grid, made his frustration known to the Mercedes team over the radio when he was over taken by Williams’ Valtteri Bottas in lap 29.
Despite Mercedes reassuring the former world champion he was on for a fifth place finish, Hamilton was drawn into a battle with ex-team-mate Jenson Button for 14th place a lap later.
Button was passed, but gained revenge several laps later as he overtook the Mercedes new boy in a midfield battle, finishing eight and four places ahead of Hamilton.
Lotus’ Romain Grosjean was forced to retire for the first time this season early in the race, followed by Caterham’s Giedo van der Garde and Toro Rosso’s Jean-Eric Vergne.
1. Fernando Alonso Spain Ferrari-Ferrari 66 laps 1hr 39m 16.596s
2. Kimi Raikkonen Finand Lotus-Renault +00m 09.3s
3. Felipe Massa Brazil Ferrari-Ferrari +00m 26.0s
4. Sebastian Vettel Germany Red Bull-Renault +00m 38.2s
5. Mark Webber Australia Red Bull-Renault +00m 47.9s
6. Nico Rosberg Germany Mercedes-Mercedes +01m 08.0s
7. Paul di Resta Britain Force India-Mercedes +01m 08.9s
8. Jenson Button Britain McLaren-Mercedes +01m 19.5s
9. Sergio Perez Mexico McLaren-Mercedes +01m 21.7s
10. Daniel Ricciardo Australia Toro Rosso-Ferrari +1 lap
11. Esteban Gutierrez Spain Sauber-Ferrari +1 lap
12. Lewis Hamilton Britain Mercedes-Mercedes +1 lap
13. Adrian Sutil Germany Force India-Mercedes +1 lap
14. Pastor Maldonado Venezuela Williams-Renault +1 lap
15. Nico Hulkenberg Germany Sauber-Ferrari +1 lap
16. Valtteri Bottas Finland Williams-Renault +1 lap
17. Charles Pic France Caterham-Renault +1 lap
18. Jules Bianchi France Marussia-Cosworth +2 laps
19. Max Chilton Britain Marussia-Cosworth +2 laps
Rtd Jean-Eric Vergne France Toro Rosso-Ferrari 52 laps completed
Rtd Giedo van der Garde Holland Caterham-Renault 21 laps completed
Rtd Romain Grosjean France Lotus-Renault 8 laps completed