Garcia moved up two weight classes on Saturday night to take on Spence and took a pounding, though he never went down. Garcia, obviously worn out, spent the later rounds blocking punches instead of throwing them.
Spence improved to 25-0 after all three judges awarded him every round. One card was 120-107, and the other two were 120-108.
It was the first time Spence had to go the distance in his last 12 fights.
Garcia, who moved up from 135 to 147 pounds in his attempt to become a five-division champion, lost for the first time in 40 pro fights.
The hard-punching Spence landed 345 of the 1,082 punches (32 per cent) he threw both of those career highs. That included 237 of 464 (51 per cent) of his power punches in his second title defence at home in North Texas in nine months.