1

我正在尝试将 AOP 与 picocontainer 一起使用。

到目前为止,我在文档中找到:http: //picocontainer.codehaus.org/interception.html

pico = new DefaultPicoContainer();  
pico.as(INTERCEPT).addComponent(Apple.class, BraeburnApple.class);  

然后创建拦截器,但是通过代码查看,我在任何地方都找不到 INTERCEPT 属性。

as 接收一个 Properties 值,该值 pico 在 Characteristic 类中实现。

任何人都有线索,或者之前已经实施过并且知道如何保持它?

谢谢

4

2 回答 2

0

看起来这个 Behavior 的属性在这个 pico 版本中不知何故丢失了,检查旧版本中的 org.picocontainer.Characteristics,我真的希望它在某个地方实现:)

在 pico 中也有老式的拦截方式:http: //www.markhneedham.com/blog/2008/11/11/logging-with-pico-container/

由于 2.14.3 的 org.picocontainer.behaviors 仍然有这些类,我想这种方式是可以的

于 2014-07-24T14:43:56.480 回答
0

这对我有用。首先,通过扩展一个 bean 创建一个代理:

public static class ChangeMapInfoEndpointInterceptor extends MapInfoRoutingManagementBean {
    @Override
    public void setEndpoint(String endpoint) {
        System.out.println("setEndpoint called");
    }
}

然后将其传递给拦截式容器:

    MutablePicoContainer context = new PicoBuilder().withBehaviors(new Intercepting()).build();
    context.addComponent(MapInfoRoutingManagement.class, MapInfoRoutingManagementBean.class);
    Intercepted intercepted = context.getComponentAdapter(MapInfoRoutingManagement.class).findAdapterOfType(Intercepted.class);
    intercepted.addPostInvocation(MapInfoRoutingManagement.class, new ChangeMapInfoEndpointInterceptor());
于 2015-06-17T08:17:36.780 回答