【插件分享】添加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);
}


评论区

JFinal

2018-11-02 15:17

第一次看到 Aop.addMapping(...) 这么用的,很有创意,而且代码还很省,基本就是一个注解一个扫描搞定

花火丶

2018-11-02 17:39

@JFinal 凡是项目中需要配置的地方,都喜欢有对应的注解来解决,像Controller,Model,和Service。

快乐的蹦豆子

2018-11-03 16:56

service如果没有多种实现,用接口的好处是什么

花火丶

2018-11-03 21:40

@快乐的蹦豆子 这个并不影响多种实现吧,只需要将用到的实现类加上注解。

快乐的蹦豆子

2018-11-04 10:53

我明白你的意思,就是接口和实现的映射通过注解完成了,我想要表达的是如果确定没有多种实现,接口还有用的必要吗

花火丶

2018-11-04 18:47

@快乐的蹦豆子 嗯,我的理解是,接口是为了实现解耦,多种实现是接口解耦的表现方式。

HingLo

2018-11-06 15:27

看了半天才看明白,也学习了很多东西,但是我仔细看了一下,好像只是对Service接口是单实现的时候比较好,如果Service接口有多个实现.在使用@Inject任然需要指定具体实现的接口.不知道我理解的是不是对的?

花火丶

2018-11-08 09:13

@HingLo 嗯,经验有限,没遇到过需要用到多实现的情况

banyue

2019-05-14 09:41

你好,不知道为何在我这Aop这个类在代码中不能直接用,没有相关类的导入提示。是缺少哪个jar的引用嘛

JFinal

2019-05-14 09:51

@花火丶 新版本 Aop.addMapping 要改成 AopManager.me().addMapping(...), Aop 内部代码更纯粹

banyue

2019-05-14 11:08

@JFinal 你好 请问 AopManager 这个类为什么会无法引用呢,缺少哪个jar麽

banyue

2019-05-14 11:10

@JFinal 还有个问题,社区分享,66页内容,为了解决问题,我从头翻到尾,没有一个标题检索嘛!

JFinal

2019-05-14 11:25

@banyue AopManager 在 jfinal 3.8 才添加的,升级一下即可

社区的改版马上要完成了,会有搜索功能

banyue

2019-05-14 11:56

@JFinal 好的 谢啦