spring 源码阅读(4)spring 常用注解

大家好呀,我是小羊,如果大家喜欢我的文章的话😁,就关注我一起学习进步吧~



1.@bean

@Bean表示方法产生一个由Spring管理的bean,一般用在方法上,用于将方法的返回值对象放入容器

  1. 当使用name属性可用时,用于确定bean名称的默认策略是使用方法的名称。但是如果需要显式命名,则可以在注解上使用 name 属性(或其别名{value})。

  2. 另请注意 name接受一个字符串数组,允许为单个bean使用多个名称(即主bean名称加上一个或多个别名)。

比如我们经常在数据库连接池配置 @bean 注解,用于生成数据源实例。

spring 源码阅读(4)spring 常用注解
spring 源码阅读(4)spring 常用注解

2.@Component

用于实例化对象,将对象注入IOC容器,一般作用在类上,它和 @bean 一样都是把实例放入 spring 容器中,而 @bean 一般作用在方法上,用方法的返回对象放入spring中,而@Component一般作用在 类上,生成该类的对象存入到 spring容器中。

spring 源码阅读(4)spring 常用注解它还有一些子注解:

  1. @Controller
  2. @Service
  3. @Repository
  4. @configuration
spring 源码阅读(4)spring 常用注解
spring 源码阅读(4)spring 常用注解
spring 源码阅读(4)spring 常用注解
spring 源码阅读(4)spring 常用注解

这些注解的作用类似,被此注解标注的类会被Spring自动管理起来。为了代码更好的分层,spring 区分了这些注解。

3.@ComponentScan

@ComponentScan注解用于配置Spring需要扫描的被组件注解注释的类所在的包。

可以通过配置其basePackages属性或者value属性来配置需要扫描的包路径。value属性是basePackages的别名。如下图所示。

spring 源码阅读(4)spring 常用注解
spring 源码阅读(4)spring 常用注解

4. @value

简单属性的依赖注入,一般用于自定义一些配置,使用起来简单高效

spring 源码阅读(4)spring 常用注解
spring 源码阅读(4)spring 常用注解

5. @Autowired

对象属性的依赖注入,比如我们想要在项目中使用spring 容器中的某个bean,直接 使用 @Autowride 注解即可。简单便捷,

spring 源码阅读(4)spring 常用注解
spring 源码阅读(4)spring 常用注解

1.自动装配模式

如上图所示,有五种自动接线模式。让我们一一讨论。

  1. No 此选项是 spring 框架的默认选项,这意味着自动装配是关闭的。您必须在 bean 定义中使用标记显式设置依赖关系。
  2. byName 此选项启用基于 bean 名称的依赖项注入。在 bean 中自动装配属性时,属性名称用于在配置文件中搜索匹配的 bean 定义。如果找到名字相同的的 bean,则将其注入到属性中。如果没有找到这样的 bean,则会引发错误。
  3. byType 此选项启用基于 bean 类型的依赖项注入。在 bean 中自动装配属性时,属性的类类型用于在配置文件中搜索匹配的 bean 定义。如果找到这样的 bean,则将其注入到属性中。如果没有找到这样的 bean,则会引发错误。
  4. constructor 通过构造函数自动装配类似于 byType,但适用于构造函数参数。在启用自动装配的 bean 中,它将查找构造函数参数的类类型,然后对所有构造函数参数执行自动装配类型。请注意,如果容器中没有一个构造函数参数类型的 bean,则会引发致命错误。

可以通过配置的方式来设置 bean 的 装配模式

<beans default-autowire="byType">

@Autowired 与 @Resource 的区别:

1.  提供方不同

@Autowired 是Spring提供的,@Resource 是J2EE提供的。

2.  装配时默认类型不同

@Autowired只按type装配,@Resource默认是按name装配。

3.  使用区别

(1)@Autowired与@Resource都可以用来装配bean,都可以写在字段或setter方法上

(2)@Autowired默认按类型装配,默认情况下必须要求依赖对象存在,如果要允许null值,可以设置它的required属性为false。如果想使用名称装配可以结合@Qualifier注解进行使用。

(3)@Resource,默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行名称查找。如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

6. @Transactional

此注解可以标在类上,也可以表在方法上,表示当前类中的方法 具有事务管理功能。

spring 源码阅读(4)spring 常用注解

有一点需要注意,一般来说,@Transactional 默认作用的异常场景是 RuntimeException,是我平时使用的时候加上 rollbackFor = Exception.class 确保在所有的异常情况下都抛出异常

spring 源码阅读(4)spring 常用注解

今天的分享就先到这里啦。

喜欢我的话,可以给我点个赞呀。

spring 源码阅读(4)spring 常用注解


原文始发于微信公众号(小羊架构):spring 源码阅读(4)spring 常用注解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/259823.html

(0)
Java朝阳的头像Java朝阳

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!