I read all of the responses, and I think I must have missed something somewhere! Every one of them comments on potty training, but I don't see that in your question. As for sleeping with you, put him in his bed, and no matter how long it takes, just keep putting him back in every time he gets up, and just let him cry. It will take a while, but it will be worth it. Take away whatever he throws with a firm " No, we don't throw things." Wait a few minutes, then give it back, as long as he quits throwing it.
As for the spitting......I'm in the minority, I know, but mine had seen his dad with chew (gross!!!) and saw his dad spit, so he thought he could too, so I am a big fan of a light mouth pop, a firm " we don't spit" and a timeout in the room for about two minutes for his age. When his time is up, go into him and ask him if he knows why you sent him to his room, reiterate that we don't spit, it isn't nice and spreads germs, and then give him a big hug with a Mommy still loves you attached! It'll take a few days/weeks, but for sure nip it in the bud now.