我们都知道,如果想要将bean交由spring容器管理,就需要将bean注册在spring容器中,而bean可以通过xml或者注解的方式进行注册。
基于xml的配置一般是通过、context:component-scan等xml标签进行配置,然后由spring容器扫描xml文件进行注册。
基于注解的注册主要是通过几种spring定义的注解进行配置,同样是由spring容器扫描并创建一些bean注册到容器中,spring基于注解的开发已经越来越流行。
在spring Boot,spring Cloud 等spring家族的框架中也是大量使用注解来驱动开发。学习spring注解的开发方式,对理解和学习spring Boot,Cloud 有很大的帮助。
下面开始介绍基于注解注册bean的方式:
一 : 使用 @Configuration 和 @Bean 组合
实例:https://blog.csdn.net/weixin_43549578/article/details/86491677
二 :使用@ComponentScan注解自动注册
实例:https://blog.csdn.net/weixin_43549578/article/details/86493982
三 : 使用@Import注解导入某个类注册到spring容器中
1:@Import 使用ImportSelector 批量导入
具体方法是指定@Import的值为一个实现了ImportSelector接口的类,该类重写selectImports方法,selectImports方法返回值为一个String数组,这个数组包含要导入的全限定类名。使用了ImportSelector不会将ImportSelector实现类导入,只会将selectImports方法返回的数组指定的类导入。
2:@Import 使用ImportBeanDefinitionRegistrar
自定义一个ImportBeanDefinitionRegistrar类,实现ImportBeanDefinitionRegistrar接口,重写registerBeanDefinitions方法,通过参数registry可以注册bean
实例:https://blog.csdn.net/weixin_43549578/article/details/86500974
四 : 使用FactoryBean(工厂Bean)注册bean
实现FactoryBean接口,实现以下三个方法:
getObject 通过这个方法获得bean
getObjectType 通过这个方法获得Bean的Class对象
isSingleton 通过这个方法来指定bean的作用域是否为单例
实例:https://blog.csdn.net/weixin_43549578/article/details/86504032
五 : 通过 @Condition 注解可以实现 按照条件注册Bean
@Conditional注解可以添加在方法上也可以添加在类上,放在类上是对类中所 有@Bean方法统一设置。
该注解需要实现Condition 接口,并重写matches方法,根据该方法返回的布尔值来决定是否注册Bean
实例:https://blog.csdn.net/weixin_43549578/article/details/86500546
以上是 几种通过注解的方式注册bean 。
bean的作用域:
singleton : 单例,整个应用中只存在一个实例bean
prototype : 与单例相对,每次getBean都会重新生成一个Bean。
request : web环境下,每个请求都会创建一个bean,在一次请求中只存在一个Bean,不同request的bean不同
session : web环境下,session生命周期下,获取的是同一个bean
bean的作用域默认为单例模式 ,request ,session 两中模式很少使用。
bean的懒加载 -注解配置 @Lazy
@Configuration
public class MainConfig2 {
/**
* 懒加载:
* 单实例bean:默认在容器启动的时候创建对象;
* 懒加载:容器启动不创建对象。第一次使用(获取)Bean创建对象,并初始化;
*/
@Lazy
@Bean(“person”)
public Person person(){
System.out.println(“给容器中添加Person…”);
return new Person(“张三”, 25);
}
}