@Before("execution(@ibyde.backbone.annotation.Verify * *(..))")
	@SuppressWarnings("unchecked")
	public <S extends AbstractEntity<S>, O extends AbstractEntity<O>> void verify(JoinPoint joinPoint) {
		MethodSignature signature = (MethodSignature) joinPoint.getSignature();
		Verify verify = signature.getMethod().getAnnotation(Verify.class);

		Long subjectId = find(joinPoint, signature, verify.subjectScope(), verify.subjectIdName(), Long.class);
		S subject = (S) find(joinPoint, signature, verify.subjectScope(), verify.subjectName(), AbstractEntity.class);
		Long objectId = find(joinPoint, signature, verify.objectScope(), verify.objectIdName(), Long.class);
		O object = (O) find(joinPoint, signature, verify.objectScope(), verify.objectName(), AbstractEntity.class);

		AbstractVerifier<S, O> verifier = (AbstractVerifier<S, O>) applicationContext.getBean(verify.verifierClass());
		verifier.verify(subjectId, subject, verify.action(), verify.customAction(), objectId, object);
	}