4.6 Aop 工具

    以上代码会创建 Service 对象,如果 Service 中使用了 @Before 配置过拦截器,那么会生效,如果 Service 中的属性使用了 @Inject,则会被注入依赖对象。

    Aop.inject(…) 可以在任意时空对目标对象进行注入,该方法相对于 Aop.get(…) 方法少一个对象创建功能:

    1. Service service = new Service(...);
    2. Aop.inject(service);

    以上代码将会对 Service 类中使用 @Inject 注解过的属性进行依赖注入。

    2、AopManager

    addMapping 用于建立接口、抽象类到其实现类之间的映射关系,例如:

    通过上面的映射,下面的代码将会为 Serivce 创建 MyService 对象,而非 Service 对象:

    1. // 这里获取到的是 MyService 对象
    2. Aop.get(Service.class);
    3.  
    4. // 这里被注入的是 MyService 对象
    5. Service service;

    AopManager.me().addMapping(…) 的用途是为接口、抽象类指定被注入的具体实现类。

    上面代码添加完成以后,可以在任何地方通过下面的方式获取单例对象:

    1. // 获取时使用单例对象
    2. service = Aop.get(Service.class);
    3.  
    4. // 注入时也可以使用前面配置的单例对象
    5. @Inject

    在添加为单例对象之前还可以先为其注入依赖对象:

    setAopFactory(…) 用于用户扩展出 AopFactory 实现类,实现更多扩展性功能,例如 jboot 项目中对于注入远程访问对象的扩展: ,JbootAopFactory.java 中的 doInjectRPC 即注入远程过程调用的实现类。