1 快速上手

2 JFinalConfig

3 Controller

4 AOP

5 ActiveRecord

6 Enjoy 模板引擎

7 EhCachePlugin

8 RedisPlugin

9 Cron4jPlugin

10 Validator

11 国际化

12 Json 转换

13 JFinal架构及扩展

14 升级到 4.4

4.6 Aop 工具

1、Aop

1.1、get(...)

? ?Aop.get(...) 可以在任意时空创建对象并且对其进行依赖注入,例如:

Service?service?=?Aop.get(Service.class);

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

1.2、inject(...)

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

Service?service?=?new?Service(...);
Aop.inject(service);

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


2、AopManager

? ?AopManager 用于管理 Aop 的各种配置

2.1、addMapping(...)

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

AopManager.me().addMapping(Service.class,?MyService.class);

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

//?这里获取到的是?MyService?对象
Aop.get(Service.class);

//?这里被注入的是?MyService?对象
@Inject
Service?service;

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

2.2、addSingletonObject(...)

? ? ?由于 Aop 创建对象时不支持为构造方法传递参数,所以还需提供 addSingletonObject(...) 添加单例对象:

//?Service?类的构造方法中传入了两个参数
Service?service?=?new?Service(paraAaa,?paraBbb);
AopManager.me().addSingletonObject(service);

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

//?获取时使用单例对象
service?=?Aop.get(Service.class);

//?注入时也可以使用前面配置的单例对象
@Inject
Service?service;

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

Service?service?=?new?Service(paraAaa,?paraBbb);
//?这里是对?Service?进行依赖注入
Aop.inject(service);

//?为单例注入依赖以后,再添加为单例供后续使用
AopManager.me().addSingletonObject(service);

2.3、setAopFactory(...)

? ? setAopFactory(...) 用于用户扩展出 AopFactory 实现类,实现更多扩展性功能,例如 jboot 项目中对于注入远程访问对象的扩展:https://gitee.com/fuhai/jboot/blob/master/src/main/java/io/jboot/aop/JbootAopFactory.java?,JbootAopFactory.java 中的 doInjectRPC 即注入远程过程调用的实现类。