如果需要开发一个sdk或者类似sdk的项目,作为一个jar包被其他工程依赖就可以使用你这个sdk工程提供的功能,那么ImportAware接口配合注解注解会有很大的作用。
一般情况下用在公共项目里,比如类似用户中心这样有很多公共能力的项目。
先看一张图,英文注释比较简单,说的也比较清楚,没有什么复杂的单词。
具体怎么使用呢?
- 定义自定义注解
- 自定义注解中增加各种配置属性,需要有默认值
- 在配置文件中实现该接口,重写其中唯一的方法
void setImportMetadata(annotationMetadata importMetadata);
4.在这个需要重写的方法中提取出自定义注解中配置的各个属性值
5.将这些属性值用在你的项目配置文件中做不同的配置,比如:拦截器、过滤器、servlet等等。
6.编译、打包发布至maven私服
7.其他项目依赖该项目
8.其他项目在启动配置类中加入该注解并配置相应参数
下边举个栗子:
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target({ java.lang.annotation.ElementType.TYPE }) @Documented @Import({ SsoConfiguration.class, SsoRedisAutoConfiguration.class }) @EnableRedisHttpSession @Configuration public @interface EnableSSO { /** ssofilter顺序 */ int filterOrder() default -100; /** 是否启动菜单url的匹配,默认关闭 */ boolean enableMenuPattern() default false; /** 是否启用记住功能 */ boolean enableRememberMe() default false; /** 记住验证规则 */ RememberMeType rememberMeType() default RememberMeType.USER_AGENT; ........ } /** * 解析注解 -- 解析权限认证注解(EnableSSO) * 重写 ImportAware中方法 */ @Override public void setImportMetadata(AnnotationMetadata importMetadata) { Map<String, Object> enableAttrMap = importMetadata.getAnnotationAttributes(EnableSSO.class.getName()); AnnotationAttributes enableAttrs = AnnotationAttributes.fromMap(enableAttrMap); this.enableMenuPattern = enableAttrs.getBoolean("enableMenuPattern"); this.enableRememberMe = enableAttrs.getBoolean("enableRememberMe"); rememberMeType = enableAttrs.getEnum("rememberMeType"); ...... }
然后在该配置类中将获取到的这些配置属性用在项目中的具体配置文件中就可以。
如果有疑问请评论,笔者看到会一一解答。该写代码了,今天就先到这里。欢迎关注,非常感谢!
,