A lot of times this is a power play so if you change the way you word things you might have better success.
Today my son decided to bring his (messy) snack on the couch today while I was tending to his sister. My initial reaction was get off the couch with that right now to which he defiantly said no. Instead of yelling/punishing him, I said you have two choices. I asked him if he wanted to sit at the kitchen table or if he wanted to eat at his table instead. In that example I gave him some control back over the situation so he stopped being defiant yet I still got the desired outcome from his behavior.
Another thing about your words is choose them wisely. A long winded explanation about how you can't do something will go in one ear and out the other. Get on one knee, lightly grab his shoulder and explain in short, concise words.
If he's doing something like being rough with toys (or others), redirect to gentle play and model what you want him to do instead. Actions speak louder than words.
If he gets wound up/out of control redirect him to a more appropriate activity that will burn energy. If he's got lots of energy, a climber and/or a kiddie trampoline are great, appropriate ways to get out energy. Heavy work activities like pulling a wagon with something a little heavy in it will help as well.
Giving kids some control in the little things or letting them choose between two acceptable choices really can help from having to manage the defiance as a power play over control.