首页 > 其他分享 >springboot[2]_常用注解

springboot[2]_常用注解

时间:2024-08-23 09:17:50浏览次数:8  
标签:常用 springboot animal public String Animal 注解 class name

介绍一些常用注解。

springBoot因为很少用到xml来配置bean文件,所以大部分都是用注解来创建和管理相关bean。

@Component、 @Service、 @Repository 和 @Controller这几个注解效果都是差不多的,都是可以用来创建bean实例的。只是规定使用的方法不同而已。

1. @Component

自动被component扫描

2. @Controller

用于web层

3. @Service

用于service层

4. @Repository

用于数据存储层

5. @Bean

bean注解用于告诉方法,产生一个Bean对象,然后交由Spring容器管理。 多用于@Configuration注解修饰的配置类中使用。

6. @Configuration

告诉SpringBoot修饰的类是一个配置类。@Bean修饰的animal即bean名称。

public class Animal {
    private String name;

    public Animal() {
    }
    
    public Animal(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

配置类:

@Configuration
public class MyConfig {
    @Bean
    public Animal animal(){
        return new Animal("cat");
    }
}

启动:

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);

        Animal animal1 = context.getBean(Animal.class);
        System.out.println(animal1.getName());
        Animal animal2 = (Animal) context.getBean("animal");
        System.out.println(animal2.getName());
        System.out.println(animal1 == animal2);
    }
}

输出:

cat
cat
true

@Bean和@Configuration配合使用,@Bean修饰的animal方法,将Animal也添加到spring的管理中。重复调用getBean(),获得的也都是同一个对象。

7. @Import

可以手动导入组件。默认调用无参构造器创建类。

@Import(Animal.class)
@Configuration
public class MyConfig {
}

8. @Conditional

条件装配。可以根据各种情况来装配组件。

注解

例如 ConditionalOnBean ,就是在bean存在的情况下再来装配所修饰的组件。

我建了一个和Animal类似的类,Plant。

@ConditionalOnBean:

@Configuration
public class MyConfig {
    @Bean
    public Plant plant() {
        return new Plant("flower");
    }

    @Bean
    @ConditionalOnBean(Plant.class)
    public Animal animal() {
        return new Animal("cat");
    }
}
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);

        Animal animal = context.getBean(Animal.class);
        System.out.println(animal.getName());
    }
}

输出:

cat

如果把这plant注册的代码删掉,在获取Animal的时候则会报bean不存在的错

 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.yt.myboot.entity.Animal' available

9. @ImportResource

导入xml配置,相当于利用以前的xml来导入bean组件。

@Configuration
@ImportResource("classpath:xxx.xml")
public class MyConfig {
}

10. @ConfigurationProperties

将properties配置的内容绑定到javaBean的属性中。

首先,我们先将之前写的@Configuration中自动注册Animal的方法去掉。

然后,给Animal类再添加一个属性age。在使用ConfigurationProperties之前要保证对象是spring容器中的组件,所以要加一个@Component注解。prefix是Properties配置文件中的前缀。

@Component
@ConfigurationProperties(prefix = "animal")
public class Animal {
    private String name;

    private Integer age;

    public Animal() {
    }

    public Animal(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

application.properties:

animal.name=cat
animal.age=3

测试:

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);

        Animal animal = context.getBean(Animal.class);
        System.out.println(animal.getName() + ":" + animal.getAge());
    }

输出:

cat:3

11. @EnableConfigurationProperties

启动配置注解。作用是使得用 @ConfigurationProperties 注解的类生效。

前面说过,使用@ConfigurationProperties注解,得要保证对象是spring容器中的组件,所以要加上@Component注解。

但是,如果不想要加@Component注解也可以,把@Component去掉,然后再配置类上加上@EnableConfigurationProperties,标明是哪一个类即可。

@ConfigurationProperties(prefix = "animal")
public class Animal {
	......
}

配置类:

@Configuration
@EnableConfigurationProperties(Animal.class)
public class MyConfig {
}

输出一样是

cat:3

标签:常用,springboot,animal,public,String,Animal,注解,class,name
From: https://www.cnblogs.com/Aeons/p/18375207

相关文章

  • springboot[1]_HelloWorld
    1.介绍springboot项目官网:https://spring.io/projects/spring-bootspringboot是一个基于java的开源框架,能够轻松快速地创建基于spring的应用程序。它的目的在于减少一些繁琐的配置,减少甚至不需要配置文件,因为内置了Tomcat服务器,所以可以快速开发并启动一个项目。我们以创建H......
  • springboot[4]_配置mybatis
    在springboot中使用mybatis1.建表在test库中,建立一张animal表,并存入三条数据。CREATETABLE`test`.`animal`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar(30)CHARACTERSETlatin1COLLATElatin1_swedish_ciNULLDEFAULTNULL,PRIMARYKEY(`id`)......
  • 基于Springboot的智能菜谱推荐系统(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的智能菜谱推荐系统(有报告)。Javaee项目,springboot项目。资源下载:基于Springboot的智能菜谱推荐系统(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven来......
  • 神经网络中常用的函数
    在神经网络中,有许多常用的函数,每种函数在不同的场景下有其独特的应用。以下是一些常见的神经网络函数及其应用场景:###1.**激活函数(ActivationFunctions)**激活函数是神经网络中的关键组件,它们决定了一个神经元是否应该被激活。常见的激活函数包括:-**ReLU(RectifiedLinearUni......
  • docker常用命令
    文章目录docker使用基本方式查看镜像获取镜像删除镜像导出镜像加载镜像创建容器删除容器查看所有容器关闭容器创建docker网络查看docekr网络查看镜像拉取镜像启动容器docker使用基本方式查看镜像dockerimages获取镜像dockerpull删除镜像docekrrmi镜像i......
  • VS常用拓展以及快捷键
    VS常用拓展以及快捷键 VS常用拓展以及快捷键扩展1:SelectNextOccurrence该拓展可以当前目标、下一个目标、上一个目标,类似于Alt+鼠标拖动,但是可以在没对齐的情况下使用安装设置4个常用的快捷键工具->选项->键盘->c#2005选择下一个快捷键:Ctrl+D选择上一个......
  • Springboot实战——黑马点评之缓存
    Springboot黑马点评——缓存1缓存初识与简单实现1.1根据商铺id的缓存查询基础缓存实现:考虑到有数据会同时存在于数据库和缓存中,所以:Q:数据库和缓存的数据一致性问题?A:三种缓存更新策略用来解决一致性问题1.2缓存更新策略的选择第一种:内存淘汰第二种:超时剔除第三......
  • 基于Springboot+vue的学生网上请假系统
    文章底部获取项目源码联系方式【万字文档+源码】基于Springboot+vue的学生网上请假系统-可用于毕设-课程设计-练手学习1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管......
  • Linux基础优化与常用软件包说明
    1.安装常用工具1.1CentOS(7)1.1.1是否联网pingqq.com1.1.2配置yum源(安装软件的软件仓库)默认情况下yum下载软件的时候是从随机地址下载。配置yum从国内下载(仅执行即可),修改yum配置指定统一下载地址(阿里云).修改yum下载软件的地址,改为阿里云#配置yum源##备份yum......
  • C++常用容器
    目录一、引言二、顺序容器概览  1.vector——动态数组  2.deque——双端队列  3.list——双向链表三、关联容器探秘  1.set——集合  2.map——映射四、总结        在探讨C++容器的丰富世界时,我们将深入分析几种核心容器,并探讨它......