Luis de la Fuente’s side shaded a tight battle in Enschede to progress to Sunday’s final, where Zlatko Dalic’s outfit are lying in wait after beating hosts the Netherlands on Wednesday.
Yeremy Pino sent La Roja ahead after three minutes but Ciro Immobile netted from the penalty spot to level and the game seemed destined for extra time before Joselu prodded home from point-blank range to win it.
The victory eases pressure on De la Fuente, who had been heavily criticized after March’s loss to Scotland, in what was only his second game in charge.
Joselu, who has three goals in three games under the new coach, who handed him his debut, managed to stay onside and convert after Rodri Hernandez’s effort was deflected into his path.
The poacher, 33, was relegated with Espanyol this season but netted 16 times in La Liga.
“I am very happy for everyone, the group and the coach deserve it,” Jesus Navas, who became Spain’s oldest ever player at 37, told Spanish broadcaster TVE.
“We played with great intensity, we’re delighted and we can be very proud of getting ourselves into the final.
“It’s a beautiful and hard-fought triumph, this is the way we have to go to achieve success.”
De la Fuente handed new “signing” Robin Le Normand his debut alongside another French-born center-back, Aymeric Laporte, at De Grolsch Veste.
The Manchester City defender and his team-mate Rodri were playing after tasting Champions League success last Saturday, with the latter scoring the winning goal against Inter Milan in the final.
Mancini lined up with three at the back, giving veteran center-back Leonardo Bonucci a start despite his patchy season with Juventus.
Italy immediately paid the price, with captain Bonucci robbed on the edge of his own box under pressure from Gavi and Yeremy Pino, with the latter driving into the box and firing past Gianluigi Donnarumma.
However, the Azzurri quickly pulled themselves level, when Le Normand handled Nicolo Zaniolo’s effort.
Striker Ciro Immobile dispatched the penalty, back with the side for the first time since their catastrophic World Cup play-off defeat by North Macedonia in March 2022.
Sassuolo midfielder David Frattesi ran onto Jorginho’s chip and slotted Italy’s second past Unai Simon, chosen in goal over Kepa Arrizabalaga, but it was ruled out for offside.
Alvaro Morata forced Donnarumma into a solid save down to his right as Spain played on the counter-attack, willing to go long to find the Atletico Madrid striker in an end-to-end affair, the 40th “Mediterranean derby”.
Spain thrashed Italy 4-0 in the Euro 2012 final and won in the 2021 Nations League semi-finals, while Italy won Euro 2020 after beating Spain on penalties in the semis.