JFinal

登录 注册

【插件分享】添加AOP映射

代码:

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Repository {

}

/**
 * 添加AOP映射插件
 * 
 * @author wanglibin
 *
 */
public class ServiceAopPlugin implements IPlugin {
	private List<Class<?>> repositoryList = ClassSearchUtils.search(Repository.class);

	@Override
	public boolean start() {
		// 添加Aop映射
		for (Class<?> repository : repositoryList) {
			Class<?>[] interfaces = repository.getInterfaces();
			if (interfaces.length != 1) {
				continue;
			}
			Class<?> itInterface = interfaces[0];
			Aop.addMapping(itInterface, repository.getName());
		}
		return true;
	}

	@Override
	public boolean stop() {
		return true;
	}

}

使用方法:

public interface NotifcationService {
}

@Repository
class NotifcationServiceImpl implements NotifcationService {
	private Notifcation notifcationDao = new Notifcation().dao();
}

@NameSpace
public class NotifcationController extends LawinController {
	@Inject
	private NotifcationService notifcationService;
}

config文件:

@Override
public void configPlugin(Plugins me) {
	ServiceAopPlugin serviceAopPlugin = new ServiceAopPlugin();
	me.add(serviceAopPlugin);
}


评论

  • 11-02 15:17
    第一次看到 Aop.addMapping(...) 这么用的,很有创意,而且代码还很省,基本就是一个注解一个扫描搞定
  • 11-02 17:39
    @JFinal 凡是项目中需要配置的地方,都喜欢有对应的注解来解决,像Controller,Model,和Service。
  • 11-03 16:56
    service如果没有多种实现,用接口的好处是什么
  • 11-03 21:40
    @快乐的蹦豆子 这个并不影响多种实现吧,只需要将用到的实现类加上注解。
  • 11-04 10:53
    我明白你的意思,就是接口和实现的映射通过注解完成了,我想要表达的是如果确定没有多种实现,接口还有用的必要吗
  • 11-04 18:47
    @快乐的蹦豆子 嗯,我的理解是,接口是为了实现解耦,多种实现是接口解耦的表现方式。
  • 11-06 15:27
    看了半天才看明白,也学习了很多东西,但是我仔细看了一下,好像只是对Service接口是单实现的时候比较好,如果Service接口有多个实现.在使用@Inject任然需要指定具体实现的接口.不知道我理解的是不是对的?
  • 11-08 09:13
    @HingLo 嗯,经验有限,没遇到过需要用到多实现的情况
  • 发送