三、Spring注解之@Import

spring注解之@Import

【1】@Import

? 参数value接收一个Class数组,将你传入的类以全类名作为id加入IOC容器中

? 比较简单,此处不做详细解释

【2】ImportSelector

? ImportSelector强调的是复用性,使用它需要创建一个类实现ImportSelector接口,实现方法的返回值是字符串数组,也就是需要注入容器中的组件的全类名。id同样也是全类名。

? 上代码:

//自定义逻辑返回需要导入的组件
public class MyImportSelector implements ImportSelector {
    // 返回值就是导入到容器中的组件全类名
    // AnnotationMetadata:当前标注@Import注解的类的所有注解信息
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[] { "test.spring.ZhangSan", "test.spring.LiSi", "test.spring.WangWu" };
    }
}

【3】ImportBeanDefinitionRegistrar

? spring官方就是用这种方式,实现了@Component、@Service等注解的动态注入机制。定义一个ImportBeanDefinitionRegistrar的实现类,然后在有@Configuration注解的配置类上使用@Import导入

? 具体使用:创建一个ImportBeanDefinitionRegistrar的实现类,实现registerBeanDefinitions方法,对组件进行注入。

public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    /**
     * @param annotationMetadata 当前标注@Import注解的类的所有注解信息
     * @param beanDefinitionRegistry BeanDefinition的注册类
     */
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
        RootBeanDefinition beanDefinition = new RootBeanDefinition(Cat.class);
        beanDefinitionRegistry.registerBeanDefinition("cat",beanDefinition);
    }
}

? 配置类MyConfig:

@Configuration
@Import(value = {MyBeanDefinitionRegistrar.class})
public class MyConfig {
}

/**测试结果
beanName: org.springframework.context.annotation.internalConfigurationAnnotationProcessor
beanName: org.springframework.context.annotation.internalAutowiredAnnotationProcessor
beanName: org.springframework.context.annotation.internalCommonAnnotationProcessor
beanName: org.springframework.context.event.internalEventListenerProcessor
beanName: org.springframework.context.event.internalEventListenerFactory
beanName: myConfig
beanName: cat
*/

原文地址:https://www.cnblogs.com/lee0527/p/11735485.html

时间: 2024-08-11 22:16:50

三、Spring注解之@Import的相关文章

spring注解之@Import注解的三种使用方式

目录 1.@Import注解须知 2.@Import的三种用法 3.@Import注解的三种使用方式总结 @ 1.@Import注解须知 1.@Import只能用在类上 ,@Import通过快速导入的方式实现把实例加入spring的IOC容器中 ? 2.加入IOC容器的方式有很多种,@Import注解就相对很牛皮了,@Import注解可以用于导入第三方包 ,当然@Bean注解也可以,但是@Import注解快速导入的方式更加便捷 ? 3.@Import注解有三种用法 2.@Import的三种用法

Spring使用教程(三)注解2

Bean于Bean之间存在关联关系情况下使用注解 •@Autowired 注解自动装配具有兼容类型的单个 Bean属性 –构造器, 普通字段(即使是非 public), 一切具有参数的方法都可以应用@Authwired 注解 –默认情况下, 所有使用 @Authwired 注解的属性都需要被设置. 当 Spring 找不到匹配的 Bean 装配属性时, 会抛出异常, 若某一属性允许不被设置, 可以设置 @Authwired 注解的 required 属性为 false –默认情况下, 当 IOC

Spring使用教程(三)注解1

1:@component:基本注解,标识了一个受Spring管理的主键 2:@respository:标识持久层主键 3:@Service:标识服务层(业务层)主键 4:@Controller:标识表示层主键 •Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解中通过 value 属性值标识组件的名称 使用注解,需要在Spring的配置文件中声明:<context:component-scan> –base-package 属性指定一个需要扫描的基类包,Spri

Annotation(三)——Spring注解开发

Spring框架的核心功能IoC(Inversion of Control),也就是通过Spring容器进行对象的管理,以及对象之间组合关系的映射.通常情况下我们会在xml配置文件中进行action,service,dao等层的声明,然后并告知框架我们想要的注入方式,然后在类中声明要组合类的get,set方法.而通过Spring框架中注解的运用也就主要是解决这类问题的.而框架中另一个核心知识AOP,一种面向横切面的方法编程,在程序中一般都是进行一次设置就可以的,所以都还放在配置文件中.例如声明式

Spring Aop的三个注解:@Around,@Before,@After

最近抽时间看了一些aop.好像翻译叫做切片技术.大概也能说明白是什么意思. 其中,有三个注解需要注意,分别是@Around,@Before,@After. 其中 @Around进行切片捕捉,可以捕捉到joinpoint(理解成切片对象方法). 即对方法A进行切片,则A被调用时,执行@Around.@Around可以调用 joinPoint.proceed()实际执行切片对象方法. @Before在切片方法对象实际调用前执行. @After方法在@Around方法之后调用. 注意,如果在Aroun

Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier 解析

URL:http://www.ulewo.com/user/10001/blog/273 我们在使用spring的时候经常会用到这些注解,那么这些注解到底有什么区别呢.我们先来看代码 同样分三层来看: Action 层: package com.ulewo.ioc; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @Co

Spring Data 系列(三) Spring+JPA(spring-data-commons)

本章是Spring Data系列的第三篇.系列文章,重点不是讲解JPA语法,所以跑开了JPA的很多语法等,重点放在环境搭建,通过对比方式,快速体会Spring 对JPA的强大功能. 准备代码过程中,保持了每个例子的独立性,和简单性,准备的源码包,下载即可使用.如果,对JPA语法想深入研究的话,直接下载在此基础上进行测试. 前言 Spring Data 系列(一) 入门:简单介绍了原生态的SQL使用,以及JdbcTemplate的使用,在这里写SQL的活还需要自己准备. Spring Data 系

Spring注解@Component、@Repository、@Service、@Controller区别

Spring注解@Component.@Repository.@Service.@Controller区别 Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层.业务层和控制层(Web 层)相对应.虽然目前这 3 个注释和 @Comp

Struts2+Spring3+MyBatis3整合以及Spring注解开发

 分类: Web(2)  版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在做一个SpringMVC+spring+MyBatis的项目,突然想起以前自己要搭建一个Struts2+Spring+IBatis的框架,但是没成功,正好看见培训时候老师给的千里之行的开源项目.于是将这个项目提供的SQL加入到了自己的数据库中(所以数据和项目名用的是qlzx),打算以后做练习的时候用这个数据库.那么接下来问题来了(不要说某翔或者不约,不是那个问题):我有了数据库和数据,想要搭建一个网站,该怎么做