spring的注解开发中的常用注解(一)[email protected] @Configuration @ComponentScan @Import @Scope @Lazy
公司项目开发中看到项目搭建时用到一些注解,现总结学习如下。
@Configuration
此注解说明为一个配置类,相当于一个xml配置文件,在springboot的开发中,有此注解的配置文件都会被扫描加入到ioc容器中。
@bean
相当于在xml文件中的<bean>标签,基本的写法如下
@Bean("alin")
public Person person(){
return new Person("lisi", 20);
}
在bean后不加alin的时候,生成的对象的id为方法的名字,既person。当在bean后添加了alin之后,其相应的ID就变成了alin。因为默认的spring生成的对象都是单例的,所以当有多个bean被命名成alin之后,只有一个bean会被添加到ioc容器中,其他的同名的bean则无法加入到ioc容器中。
@ComponentScan
此注解相当于xml配置文件中的<context:component-scan >,指定扫描的包,会将具有(@Controller/@Service/@Repository/@Component)注解的组件注册到容器中,一般写成@componentScan(“www.puhuijia”)的形式,来指定需要扫描的组件位置。
注意,当使用springboot进行开发的时候,默认的spring会扫描mainApplication类同级及同级目录下的所有子包,当mainApplication在一个非常内部的包下是,相应的具有@configuration @Controller/@Service/@Repository/@Component的所有组件都不能被注册到容器中,这是就要在mainApplication上添加@compnonentscan注解,来指定扫描的根目录。
@Scope
调整作用域,来指定bean生成的对象是什么类型的。相应的取值如下
-
prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。每次获取的时候才会调用方法创建对象。
-
singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。以后每次获取就是直接从容器(map.get())中拿。
-
request:同一次请求创建一个实例。
-
session:同一个session创建一个实例。
默认是单例的,前两种常用一些。
@Lazy
懒加载,只有在创建单实例bean时才会生效,默认在容器启动的时候创建对象,添加了此注解后,容器启动不创建对象,而是在第一次使用(获取)Bean创建对象,并初始化。
@Import
快速给容器中导入一个组件
@Import(MainConfig2.class})
public class MainConfig1 {
MainConfig1 组件在注册之前会注册MainConfig2组件,创建其中的bean对象。
工作中遇到是在引入dubbo的时候,将服务提供方的接口的类对象返回方法写在MainConfig2中,然后在通过@improt引入进来。
下一篇: 114. 二叉树展开为链表