Spring与MyBatis注解方式整合有个技术重点就是@Import,第三方框架与Spring整合xml方式很多是凭借自定义标签完成的,而第三方框架与Spring整合注解方式很多是靠@Import注解完成的。
@Import可以导入如下三种类:
- 普通类
- 实现ImportSelector接口的类
-
package com.example.Import; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ImportSelector; import org.springframework.core.type.AnnotationMetadata; import java.util.Map; public class MyImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata annotationMetadata) { // annotationMetadata 注解元数据,该对象内部是封装了当前使用了@Import注解的类中的其它注解的元信息 Map<String, Object> annotationAttributes = annotationMetadata.getAnnotationAttributes(ComponentScan.class.getName()); annotationAttributes.forEach((attrName, attrVaule) -> { System.out.println(attrName + "=====" + attrVaule); }); return new String[0]; } }
-
- 实现ImportBeanDefinitionRegistrar接口的类
-
package com.example.Import; import com.example.Beans.otherBeans; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanNameGenerator; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.type.AnnotationMetadata; public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator) { // 向Spring容器中注入BeanDefinition BeanDefinition beanDefinition = new RootBeanDefinition(); beanDefinition.setBeanClassName(otherBeans.class.getName()); registry.registerBeanDefinition("otherBeans", beanDefinition); } }
都是向Spring容器中注册bean对象。
-