详细易懂带你了解Spring中的注解

 更新时间:2023年08月17日 10:34:45   作者:SunCodingづ  
这篇文章主要介绍了详细易懂带你了解Spring中的注解,Spring的一个核心是IOC,是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式,需要的朋友可以参考下

Spring注解

Spring的一个核心是IOC,是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。

Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发效率!

注解本身是没有功能的,和xml一样,注解和xml都是一种元数据,元数据即解释数据的数据,也就是所谓的配置。

声明bean的注解

  • @Component: 普通的注解
  • @Service :业务逻辑层以及Service层
  • @Controller: 外部层
  • @Repository :dao层即持久层

注:@Controller、@Service、@Repository都可以称为@Component

注入bean的注解

@Autowired (根据属性类型自动装配)

当在将一个类上标注@Service或者@Controller或@Component或@Repository注解之后,spring的组件扫描就会自动发现它,并且会将其初始化为spring应用上下文中的bean。

当需要使用这个bean的时候,加上==@Autowired==注解的时候,这个bean就会被创建。而且初始化是根据无参构造函数。

  • @Autowired可以标注在属性上、方法上和构造器上,来完成自动装配。
  • 默认是根据属性类型,spring自动将匹配到的属性值进行注入

当@Autowired标注的属性是接口时,其实注入的是这个接口的实现类, 如果这个接口有多个实现类,只使用@Autowired就会报错,因为它默认是根据类型找,然后就会找到多个实现类bean,所有就不知道要注入哪个。然后它就会根据属性名去找。所以如果有多个实现类可以配合@Qualifier(value=“类名”)来使用

    @Autowired
    private UserServiceImpl userService;
    @GetMapping("{id}")
    public Result<List<OrderDTO>> selectById(@PathVariable Integer id) {
        List<OrderDTO> list = userService.selectById(id);
        return Result.ok(list);
    }

@Resource (可以根据类型注入,也可以根据名称注入)

@Resource有两个重要属性,分别是name和type

spring将name属性解析为bean的名字,而type属性则被解析为bean的类型。

所以如果使用name属性,则使用byName的自动注入策略,如果使用type属性则使用byType的自动注入策略。

如果都没有指定,则通过反射机制使用byName自动注入策略。

@Resource(name="gender")
    private String gender;
@Resource(name="age")
    private String age;
<bean name="gender" class="java.lang.String"> 
    <constructor-arg value="${oos.gender}"/> 
</bean> 
<bean name="age" class="java.lang.String"> 
    <constructor-arg value="${oos.age}"/> 
</bean>

@Resource和@Autowired注解都是实现依赖注入的。

只是@AutoWried按by type自动注入,而@Resource默认按byName自动注入。

@Qualifier (根据属性名称进行注入)

@Qualifier的使用要和上面的@Autowired一起使用,让系统知道了我们具体要引入哪个实现类,当有多个实现类的时候,我们可以使用此方法

    @Autowired
    @Qualifier(value = "userDaoImpl")
    private UserDao userDao;

@Value 注入普通类型的注入

通过@Value注解指定系统属性的名称susan.test.userName,该名称需要使用${}包起来。

@Value注解中指定的系统属性名,必须跟配置文件中的相同。

@Service
public class UserService {
    @Value("${test.userName}")
    private String userName;
    public String test() {
        System.out.println(userName);
        return userName;
    }
}

而配置文件中配置的系统属性名是:

test.user-name=张三

最后获取数据时,会发现userName竟然可能会出现乱码:

手动将ISO-8859-1格式的属性值,转换成UTF-8格式。

到此这篇关于详细易懂带你了解Spring中的注解的文章就介绍到这了,更多相关Spring中的注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot配置Swagger2登录密码的实现

    Springboot配置Swagger2登录密码的实现

    本文主要介绍了Springboot配置Swagger2登录密码的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java简单计算两个日期月数差的方法

    Java简单计算两个日期月数差的方法

    这篇文章主要介绍了Java简单计算两个日期月数差的方法,结合实例形式分析了java使用Calendar类进行日期时间操作相关技巧,需要的朋友可以参考下
    2017-06-06
  • SpringBoot JS-SDK自定义微信分享的实现

    SpringBoot JS-SDK自定义微信分享的实现

    这篇文章主要介绍了SpringBoot JS-SDK自定义微信分享的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 基于FlashPaper实现JSP在线阅读代码示例

    基于FlashPaper实现JSP在线阅读代码示例

    这篇文章主要介绍了基于FlashPaper实现JSP在线阅读代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Spring AI实现智能聊天模型

    Spring AI实现智能聊天模型

    通过本文的介绍,我们深入了解了Spring AI项目的优势和特性,以及在实际应用中的快速实战示例,Spring AI作为一个高度抽象化的人工智能应用程序开发框架,为开发者提供了便捷的模型支持、灵活的功能模块交换和优化能力
    2024-11-11
  • JAVA 开发之用静态方法返回类名的实例详解

    JAVA 开发之用静态方法返回类名的实例详解

    这篇文章主要介绍了JAVA 开发之用静态方法返回类名的实例详解的相关资料,这里主要说明使用异常来得到类名,希望能帮助到大家,需要的朋友可以参考下
    2017-08-08
  • SpringBoot集成quartz实现定时任务

    SpringBoot集成quartz实现定时任务

    这篇文章主要介绍了如何使用SpringBoot整合Quartz,并将定时任务写入库中(持久化存储),还可以任意对定时任务进行如删除、暂停、恢复等操作,需要的可以了解下
    2023-09-09
  • 举例说明Java设计模式编程中ISP接口隔离原则的使用

    举例说明Java设计模式编程中ISP接口隔离原则的使用

    这篇文章主要介绍了Java设计模式编程中ISP接口隔离原则的使用,接口隔离原则主张一个类对另外一个类的依赖性应当是建立在最小的接口上,需要的朋友可以参考下
    2016-02-02
  • Java 设计模式之责任链模式及异步责任链详解

    Java 设计模式之责任链模式及异步责任链详解

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式
    2021-11-11
  • 利用spring的拦截器自定义缓存的实现实例代码

    利用spring的拦截器自定义缓存的实现实例代码

    这篇文章主要介绍了利用spring的拦截器自定义缓存的实现实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02

最新评论