springboot[2]_常用注解

news/2024/11/17 18:09:35/文章来源:https://www.cnblogs.com/Aeons/p/18375207

介绍一些常用注解。
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
    条件装配。可以根据各种情况来装配组件。
    image

例如 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/785931.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot[4]_配置mybatis

在springboot中使用mybatis建表 在test库中,建立一张animal表,并存入三条数据。 CREATE TABLE test.animal ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(30) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, PRIMARY KEY (id) USING BTREE ) E…

qt5.14.2 MSVC opencv(不结合vs)路径添加问题 测试通过

不换行写法1 win32:CONFIG(release, debug|release): LIBS += -LG:/opencv4.4.0/opencv4.4_vs_msvc19_qt6.5/x64/vc17/lib/ -lopencv_aruco440 -lopencv_bgsegm440 -lopencv_bioinspired440 -lopencv_calib3d440 -lopencv_ccalib440 -lopencv_core440 -lopencv_cvv440 -lopencv…

Java学习笔记7-变量

1.1变量是程序的基本组成单位 不论是使用那种高级别语言,变量都是其程序的基本组成单位,比如1.2概念 变量相当于内存中一个数据存储空间 的表示,你可以把变量看做是一个房间的门牌号,通过 门牌号 我们可以找到房 间,而通过变量名可以访问到变量 ( 值 ) 。 1.3变量的使用步…

什么?!90%的ThreadLocal都在滥用或错用!

最近发现系统里面在使用到了 ThreadLocal,乍一看,好像很高级的样子。再仔细一看,完全就是一个 ThreadLocal 滥用的典型案例啊!甚至,日常的业务系统中,90%以上都在滥用或者错用啊最近在看一个系统代码时,发现系统里面在使用到了 ThreadLocal,乍一看,好像很高级的样子。…

半导体行业的数据革命:高性能数据采集系统如何改变游戏规则!

随着国产替代和半导体工厂扩产潮,半导体工厂有着大量建厂和设备管理需求,设备数据采集作为现代工业生产与管理的关键环节,其重要性不言而喻,数字化转型正深刻推动半导体制造企业实现远程监控、提高生产效率、降低生产成本、优化产品质量及明晰精细化方向。 半导体机台设备…

除了按值和引用,方法参数的第三种传递方式

参数在方法种具有按“值(by value)”和“引用(by ref)”两种传递方式,这是每个.NET程序员深入骨髓得基本概念。但是我若告诉你,.NET规定的参数传递形式其实是三种,会不会颠覆你的认知。参数在方法种具有按“值(by value)”和“引用(by ref)”两种传递方式,这是每个…

强!34.1K star! 再见Postman,新一代API测试利器,功能强大、颜值爆表!

1、引言 在当今的互联网时代,API(应用程序编程接口)已经成为连接不同软件系统的桥梁。作为一名开发者,掌握API测试技能至关重要。市面上的API测试工具琳琅满目,今天我们要介绍的是一款开源、跨平台的API测试工具——Insomnia。 2、Insomnia介绍 Insomnia是一款功能丰富、易…

Modbus初学者教程,第五章:Modbus 中的功能码和异常码

第五章:Modbus 中的功能码和异常码平时调试Modbus设备,或者学习Modbus协议,推荐一款Modbus主从站模拟器: 主站下载地址:Modbus从站模拟器 从站下载地址:Modbus主站模拟器可视化 Modbus 设备中的数据 Modbus 从设备可以想象为具有一个内部电子表格,其中填满了数字。Modbu…

袋鼠

先转化一下题意:求有多少个1~n的排列p能够满足 \(\forall i \in (1,n)\) ,使 $ p_{i} $ 左右两边的数同时小于或者大于 \(p_{i}\) ,并且\(p_{1}=s,p_{n}=t\) 。 比较明显的预设型DP(连转化题意我都做不到,悲),先正常来分析一下,我们填数从小往大枚举,如果我们填入一个数,…

JetBrains Writerside 2024.2 (macOS, Linux, Windows) - 编写、测试、构建和发布最佳教程

JetBrains Writerside 2024.2 (macOS, Linux, Windows) - 编写、测试、构建和发布最佳教程JetBrains Writerside 2024.2 (macOS, Linux, Windows) - 编写、测试、构建和发布最佳教程 JetBrains 跨平台开发者工具 请访问原文链接:https://sysin.org/blog/jetbrains-writerside/…

Citrix ADC Release 13.1 Build 54.29 (nCore, VPX, SDX, CPX, BLX) - 混合多云应用交付控制器

Citrix ADC Release 13.1 Build 54.29 (nCore, VPX, SDX, CPX, BLX) - 混合多云应用交付控制器Citrix ADC Release 13.1 Build 54.29 (nCore, VPX, SDX, CPX, BLX) - 混合多云应用交付控制器 Citrix ADC - 混合多云应用交付控制器 请访问原文链接:https://sysin.org/blog/citr…