You can't really prevent it once spammers have your address.
You can 'control' it to some degree.
When you give out your email address, use something specific to that
person/company, so -
abc@my_made_up_pretend_domain.com you would give to a company called
abc.
sender_name_goes_here@my_made_up_pretend_domain.com you give to your
friends and family where sender is the name of the person to whom you
are giving the address.
Thus is you receive SPAM into abc@ you can immediately inform ABC that
your email address is no longer valid, and change the address that they
should thereafter use to abc1@.... in the interim, you kill all mail
destined for abc@ and either put filters in place, or use your host/ISP
to do such.
This way you only ever have to inform ABC that the email address has
changed as no-one else will be (should be) using that specific address.
Likewise, if you 'prefix' personal correspondence with a persons name
prior to the @ then if that address gets compromised, the same applies
as above.
I have found that to date this method really keeps my SPAM levels to an
absolute minimum.
Of course, you may have to have postmaster@ or something equally generic
in front, but in the main, the important correspondence - the ongoing
stuff - will have a specific address unique to the sender.
Not flawless I know, but it has worked for me.
PS ... not trying to teach anyone to suck eggs, but someone might find
the info useful.