2) Add an interceptor per notification type which is attached via a separate pointcut for each notification type.

3) Use our AOP runtime interface and have subscribers register specifically for notifications on a per instance basis.

With JBoss AOP, you can apply interceptors solely to one specific object instance at runtime. So subscribers can register themselves in the traditional Listener manner, but Publishers don't have to be architected ahead of time to be publishers.