Our son is 5...we're not telling him until we pull up to the port the morning of the cruise. We're cruising with another family, but luckily they don't live in the same state as us, so little chance the surprise will be ruined.
I've traveled with my husband on work trips before, so we're just telling him we're going with daddy on a work trip, so he'll be excited he gets to go this time. I made the mistake of telling him last time we went on a cruise (and that was just on Carnival!) and I was bombarded with questions DAILY. We don't cruise until March, so I really don't want to deal with 1000 questions every day for the next 8 months! He's seen the Disney Cruise specials on tv and he's been on a cruise before (just not Disney), so I think we'll be ok with little prep for him. I've researched excursions in Nassau and Key West that are family friendly that I'm pretty certain he'll enjoy too.