Spain ended Italy's record unbeaten run of 37 matches by beating the European champion 2-1 in the Nations League semifinals after Roberto Mancini's team was reduced to 10 men.
Ferran Torres scored two goals in the first half for Spain, the second coming after Leonardo Bonucci was sent off for a second yellow card three minutes before the break.
"We've been playing good for a while now. We are a young team playing well and I think this victory is another step," said Torres, who came off four minutes into the second half after picking up a knock but said he would be fit to play Sunday's final against either world champion France or top-ranked Belgium.
"Victory over Italy in Italy. Now we'll start thinking about the final."
Lorenzo Pellegrini pulled one back for Italy late on as the Azzurri threatened an improbable comeback. In the end though, Mancini's side fell to its first loss in more than three years, since being beaten by Portugal in September 2018. Its unbeaten streak was a world record in international soccer.
"It (defeat) would have come eventually. And better tonight than the final of the Euros or a World Cup final," Mancini said.
"But this game will give us more strength despite the defeat and help us realize that we are really a great squad.
In Milan, Italy was in the hunt for more silverware while Spain was looking for revenge after losing to the Azzurri on penalties in the Euro 2020 semifinals.
Barcelona teenager Gavi P ez started, making the 17-year-old the youngest player to make his Spain debut. Gavi, who only made his first-team debut for Barcelona a month ago, broke the national record set by ngel Zubieta in 1936.
The match in front of a passionate, sell-out crowd of 37,000 at the San Siro was played with a high tempo from the start, with chances coming at both ends.
Federico Chiesa was the first to test the goalkeeper as Spain's Unai Sim n saved his effort from distance in the fifth minute and then denied Italy center-back Alessandro Bastoni moments later.
Bastoni then made a decisive block at the other end in the 13th to deny Mikel Oyarzabal following an attack down the left wing.
Spain had been probing that left flank and it provided the opener in the 17th minute as Oyarzabal's cross from the left was volleyed into the bottom right corner by Torres.
Spain almost immediately doubled its lead as Gianluigi Donnarumma fumbled Marcos Alonso's shot, and the ball came out of his hands and off the left post before Bonucci managed to clear the rebound off the line.
It was a rare mistake from the Italy goalkeeper, who was voted the player of the tournament at Euro 2020.
But his every touch was getting loudly booed by the majority of the Italy fans at San Siro, which is also the home of AC Milan the club Donnarumma left in the offseason on a free transfer to Paris Saint-Germain.
"We were disappointed because Italy was playing, it wasn't a club match, Mancini said. It could have been put to one side for once and jeer if Milan plays PSG. Italy is Italy and it comes above everything.
Italy had chances to level the match and its best opportunity came 10 minutes from halftime as first Federico Bernardeschi's shot was turned onto the post by Sim n before an unmarked Lorenzo Insigne turned Emerson's cross wide from a great position.
Italy's chances then took a blow just before the break as Bonucci was shown a second yellow card for jumping with his elbow raised on Sergio Busquets. The Italy captain had received a first booking on the half hour, for dissent.
Spain immediately made the extra man count as it doubled its lead on the stroke of halftime, with a very similar goal to its opener. This time Torres headed Oyarzabal's cross from the left back across goal and into the bottom left corner.
Despite being a man down, Italy continued to press and Chiesa hit the right post after a good run from the Juventus forward. The offside flag was up but it would have been a tight decision.
Oyarzabal almost got on the scoresheet himself in the 63rd but he headed a cross from Yeremy Pino wide of the post.
Donnarumma also saved a low shot from Alonso before Italy pulled one back seven minutes from time. Chiesa sprinted forward from inside his own half to the penalty area, drew Sim n and then unselfishly rolled across for Pellegrini to tap into an empty net.