Вероятно, самый простой способ сделать это - использовать интерфейсы и динамические прокси. Аннотации не делают ничего, кроме добавления метаданных. Вам нужно будет добавить код, чтобы действовать на основе аннотации.
Вы должны сделать несколько вещей -
Создать интерфейс
public interface IService {
@ValidateNull // Your custom annotation
public void yourMethod(String s1);
}
При использовании реализации создайте экземпляр как прокси JDK.
IService myService = (IService)java.lang.Proxy.newInstance(ServiceImpl.class.getClassLoader(),
ServiceImpl.class.getInterfaces(),
new YourProxy(new ServiceImpl());
Теперь вы можете с помощью отражения захватить все вызовы вашего метода в YourProxy
классе.
public YourProxy implements InvocationHandler {
public Object invoke(Object arg0, Method method, Object[] args) throws Throwable {
if (method.isAnnotationPresent(ValidateNull.class)) {
//Check args if they are null and return.
}
}
}
Если вы не хотите этого делать, то вам нужны более тяжелые фреймворки, такие как AspectJ / Spring AOP.