图1 Aop示例:
图2
图3
图4
图5
打印结果
动态代理的例子。
现在有一个需求; OrderServiceImpl 里 调用 OrderTabDao 。这个OrderTabDao 有两个实现类,一个是OrderTabDaoAImpl 类。一个是OrderTabDaoBImpl的类。当我们给OrderServiceImpl的query() 方法传入A 的时候调用的是OrderTabDaoAImpl 。当我们给OrderServiceImpl的query() 方法传入B 的时候调用的是OrderTabDaoBImpl; (问题来了spring 有那么多扩展点,可以不可以用以前学的呢,以前学的扩展点都是在spring 环境示例化的时候来做的,就目前的时候是已经登录后了,示例化完了。已经存在了OrderServiceImpl 和OrderTabDao 没有办法再改变了。那怎么办?可以吧这些类再拿出来改一下呗,ApplicationContextAware接口)
第一种方法实现ApplicationContextAware接口, 获取到ApplicationContext对象,然后根据query方法传的参数 ,A或者B.来选择调用不同的Dao 的实现类。
第二种方法特别简单。只需要在 OrderServiceImpl中注入一个Map <String,OrderTabDao> map ,不用实现任何接口。然后根据query方法传的参数 ,A或者B.来选择map 获取不同的值。图9
图6
图7
图8
OrderTabDaoBImpl和图8类似,不截图了。
图9