Spring核心注解

1、@Bean注解

  • 作用:用于把当前方法的返回值作为bean对象存入spring的ioc容器中
  • 位置: 一般出现在方法上面
  • 属性: name:用于指定bean的id。当不写时,默认值是当前方法的名称
  • 细节:当我们使用注解配置方法时,如果方法有参数,spring框架会去容器中查找有没有可用的bean对象。查找的方式和Autowired注解的作用是一样的

2、@Primary注解

该注解是框架在3.0版中引入的

其作用与功能,当有多个相同类型的bean时,使用@Primary来赋予bean更高的优先级


3、@DependsOn注解

         @DependsOn注解是Spring中提供的一个指定Spring创建Bean的依赖顺序的注解。例如,在Spring中需要创建A对象和B对象,可以使用@DependsOn注解指定创建A对象时依赖B对象,此时,在Spring中就会先创建B对象,然后再创建A对象。


4、@Lazy

组件懒加载(最后使用的时候才创建)


5、@Scope

        类注解,设置在类的上方,设置该类创建对象的作用范围,可以用来设置创建出来的bean是否为单例对象,属性定义bean的作用范围,默认为singleto(单例),可填prototype(非单例)


6、 @Configuration

声明这是一个配置类,替换以前配置文件

作用:用于定义配置类,,可替换xml配置文件,也可以理解为Spring配置文件当中的上下文。被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
位置: 一般出现在类上面
细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。


7、@Component

它是这些注解里面最普通的一个注解,一般用于把普通pojo实例化到spring容器中
@Controller和@Service和@Repository是它的特殊情况,当一个类不需要进行这几种特殊归类的时候,只是作为一个普通的类,被Spring管理就OK的时候,比较适合采用@Component注解。
原理:将普通JavaBean实例化到spring容器中,Spring容器统一管理,用起来不用自己new了,相当于配置文件中的< bean id=“” class=“”/>


8、@Indexed

        Spring包org.springframework.stereotype下,除了@Component@Controller@Service@Repository外,在5.0版本中新增了@Indexed注解。

        应用中使用@ComponentScan扫描的package包含的类越来越多的时候,Spring启动时模式注解解析时间就会变得越长

        @Indexed注解的引入正是为了解决这个问题,项目编译打包时,会在自动生成META-INF/spring.components文件,文件包含被@Indexed注释的类的模式解析结果。当Spring应用上下文进行组件扫描时,META-INF/spring.components会被org.springframework.context.index.CandidateComponentsIndexLoader读取并加载,转换为CandidateComponentsIndex对象,此时组件扫描会读取CandidateComponentsIndex,而不进行实际扫描,从而提高组件扫描效率,减少应用启动时间。


9、@Order

        注解@Order的作用是定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order的影响; 

        数字越小优先级越高,越先工作


10、@ComponentScan 

        这是 Spring 3.1 添加的一个注解,用来代替配置文件中的 component-scan 配置,开启组件扫描,即自动扫描包路径下的 @Component 注解进行注册 bean 实例到 context 中。另外,@ComponentScans 是可重复注解,即可以配置多个,用来配置注册不同的子包。


11、@Conditional 

        @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean


12、@Import

作用:用于导入其他的配置类,导入第三方jar包中的组件,或定制批量导入组件逻辑,用来引入额外的一个或者多个 @Configuration 修饰的配置文件类。
位置: 一般出现在主配置类上面
属性:value:用于指定其他配置类的字节码。
当我们使用Import的注解之后,有Import注解的类就是父配置类,而导入的都是子配置类


13、@ImportResource

 @ImportResource 是导入 xml 配置,等同于 xml 文件的 resources

 替代 XML 元素,如果有些通过类的注册方式配置不了的,可以通过这个注解引入额外的 XML 配置文件,有些老的配置文件无法通过 @Configuration 方式配置的非常管用

14、@Profile

        在Spring容器中如果存在同一类型的多个组件,可以使用@Profile注解标识实际要获取的是哪一个bean,这在不同的环境使用不同的变量的场景下非常有用

        最典型的例子:开发环境、测试环境、生产环境会配置不同的数据源,在尽量不修改代码的情况下,可以使用这个注解来动态指定要连接的数据源


15、@PropertySource

        @PropertySource注解用于指定资源文件读取的位置,它不仅能读取properties文件,也能读取xml文件,并且通过YAML解析器,配合自定义PropertySourceFactory实现解析YAML文件。 


16、@PropertySources

        Spring4中对@PropertySource这个注解进行了功能增强,增加了@PropertySources注解,相当于其父标签,下面可以包括多个子PropertySource注解,示例如下 

@PropertySources({
	@PropertySource("classpath:config.properties"),
	@PropertySource("classpath:db.properties")
})

17、@Lookup

单例组件依赖非单例组件,非单例组件获取需要使用方法

你可能感兴趣的:(spring源码学习,spring)