私は、少なくとも侵入的な方法だけでAOPを使用することだと思います。 HK2はAOPを提供しています。できることは、ConstructorInterceptor
を作成することです。
public class LoggingConstructorInterceptor implements ConstructorInterceptor {
private static final Logger LOG
= Logger.getLogger(LoggingConstructorInterceptor.class.getName());
@Override
public Object construct(ConstructorInvocation invocation) throws Throwable {
Constructor ctor = invocation.getConstructor();
LOG.log(Level.INFO, "Creating: {0}", ctor.getDeclaringClass().getName());
// returned instance from constructor invocation.
Object instance = invocation.proceed();
LOG.log(Level.INFO, "Created Instance: {0}", instance.toString());
return instance;
}
}
ような何かその後それからちょうど完全な参照してください
new ResourceConfig()
.register(new AbstractBinder(){
@Override
public void configure() {
bind(PathInterceptionService.class)
.to(InterceptionService.class)
.in(Singleton.class);
bind(LoggingConstructorInterceptor.class)
.to(ConstructorInterceptor.class)
.in(Singleton.class);
}
});
DIシステムでInterceptionService
とConstructorInterceptor
を登録@Path
public class PathInterceptionService implements InterceptionService {
private static final ConstructorInterceptor CTOR_INTERCEPTOR
= new LoggingConstructorInterceptor();
private final static List<ConstructorInterceptor> CTOR_LIST
= Collections.singletonList(CTOR_INTERCEPTOR);
@Override
public Filter getDescriptorFilter() {
return BuilderHelper.allFilter();
}
@Override
public List<MethodInterceptor> getMethodInterceptors(Method method) {
return null;
}
@Override
public List<ConstructorInterceptor> getConstructorInterceptors(Constructor<?> ctor) {
if (ctor.getDeclaringClass().isAnnotationPresent(Path.class)) {
return CTOR_LIST;
}
return null;
}
}
で注釈を付けたクラス用のインターセプターを使用するだけにInterceptorService
を作成this Gist
の例3210
関連項目:働い
!!どうもありがとうございました!!クラスは単に 'new'キーワードで作成され、注入されないので、91行目の束縛は必要ないことに気付きました。 – user3303372
ええ、あなたの権利。私はいろいろなことを試していたと思う。 –