Boundaries, boundaries, boundaries. When you say something, mean it. When you threaten a consequence, follow through. Stay consistent in your behaviour, and remain predictable.
If you follow a path, you have to stay the course, no matter how long it takes and how hard it is.
An example! 2 years ago, DH and I spent two and a half hours of our Christmas Day sat at the table with DS after lunch because he refused to try one mouthful of turkey, one mouthful of roast potato, a slice of carrot and one pea. This is what we'd whittled his plate down to after flat refusal to eat, because we believe that he should try everything once. If he doesn't like it and he's had it before, fair enough (although we still try to "encourage" him to have another go
). However, we were not prepared to throw away an entire plate of food that his grandmother had made without him even trying it.
So once we decided that, we had to stick to it. And it took 2 and a half hours before DS gave in and tried it (roast dinners are now his favourite, incidentally).
Had we given in to the wailing and tantrums after 2 hours and said, "right, we've had enough, we can't be bothered with this", then DS would know for the future that all he needs to do is kick up enough of a stink and after a while we'll give in to him.
Not the precedent we wanted to set!
I know some of this sounds harsh, but when it's balanced with tonnes of love and cuddles and kisses and words of appreciation and praise, then I think it works. And after struggling through for the last couple of years (with MANY times when we found ourselves pulling our hair out and screaming "WHY DO WE BOTHER???????), it's now starting to pay dividends.
Obviously I'm not proclaiming to be some sort of expert, and let me tell you that DS still has his moments, but as a whole it's worked well for us - not just as a preventative method for spoiling, but just as a general approach to raising a child/children.