@yangguowei While options 1-3 are possible, it would be rather limiting as if you would place a single bullet via e.g. a TransformConstraint, what do you do when you want to spawn e.g. 5 bullets for a machine gun?
The typical approach is to go for the programmatic solution 4. where the animation triggers spawning a separate bullet (or arrow) GameObject at the muzzle position. You can use the BoneFollower component to let a GameObject follow e.g. the position of your bullet-spawn-bone.