Spring 复习 一、组件注册

141 阅读2分钟

一、组件注册

方式1:包扫描

@ComponentScan

扫描指定包,可以把扫描到标有@Controller@Service@Repository@Component等注解的类的实例,加入容器

属性名作用
value指定要扫描的包
excludeFilters添加过滤器,指明排除某种类型的bean加入到容器,详见FilterType
includeFilters添加过滤器,指明只要某种类型的bean加入到容器
通常需要关闭默认的过滤器
useDefaultFilters是否开启默认的过滤器

方式2:配置类

@Configuration

创建一个配置类,本身也是一个@Component,可以使用包扫描加入容器。

在把配置类加入容器时,会将其中所有配置的bean也加入容器。

@Bean

标注在配置类的方法上,将方法的返回值作为bean加入容器 ,方法名作为bean的id,

属性名作用
value重新定义bean的id
  • 可以使用@Scope注解来定义bean的作用域
  • 可以使用@Lazy注解来决定单例bean是否懒加载
  • 可以使用@Conditional注解来决定bean是否加载,详见Condition

@Import

标注在配置类上,可以快速的导入一个类的实例进入ioc容器中,无需像@Bean再去写一个方法把类的实例new出来作为返回值返回。

该注解的value属性可以为以下三种值组成的数组

  • 欲注册bean的Class
  • 实现ImportSelector接口的类的Class;实现其中方法,该方法返回需要导入ioc容器的类的全类名数组
  • 实现ImportBeanDefinitionRegistrar接口的类的Class,实现其中方法来手动注册bean

FactoryBean

顾名思义是一个工厂bean,FactoryBean是一个接口,需要被实现,本身可以使用@Bean注解加入到ioc容器中。

使用id获取bean时,获得到的是FactoryBean中工厂方法创建的实例,而不是工厂本身

在id前加上&,才可以获取FactoryBean本身

@Profile

可以标注在bean或配置类上(类、 @bean@Component),该注解本身是一个@Conditional

可以使用@Profile注解的value属性来表示bean在哪个环境下才被加入容器

可以使用-Dspring.profiles.active环境变量来设置当前环境,可以有多个值,默认为default环境