请教IoC模式中的问题

    
yanbuhan
04-09-16 3 307

IoC模式中一文中有如下描述:
“DefaultPicoContainer container = new DefaultPicoContainer();
container.registerComponentImplementation(PicoUserManager.class);
container.registerComponentImplementation(PicoXXXX1Manager.class);
container.registerComponentImplementation(PicoXXXX2Manager.class);
.....

Logging logging = (Logging) container.getComponentMulticaster();

logging.enableLogging(new SimpleLog("pico"));//激活log

  由上代码可见,通过使用简单一行logging.enableLogging()方法使所有的应用类的记录功能激活。这是不是类似AOP的advice实现?


这个地方“通过使用简单一行logging.enableLogging()方法使所有的应用类的记录功能激活“,怎么理解?我没想通!!!

orbat
2004-09-17 15:00

使用 IoC 确实能实现类似 AOP 的功能。

Logging logging = (Logging) container.getComponentMulticaster(Logging.class);
会取出所有实现了 Logging 接口的组件,并返回一个动态代理类

logging.enableLogging(new SimpleLog("pico"));//激活log
logging代理类会调用每一个组件的 enableLogging 方法

yanbuhan
2004-09-17 18:38

Logging又不是List它如何同时指向多个组件?

banq
2004-10-10 09:40

关于“通过使用简单一行logging.enableLogging()方法使所有的应用类的记录功能激活“。

所有应用类都有各自自己的记录功能,logging.enableLogging()类似触发器,可以从一个记录这个纵向激活所有应用类的记录功能。

有个开源项目是利用picocontainer来实现AOP。