@configurationproperties注解的使用_SpringBoot常用注解的简单理解

不定时更新...

文章目录

      • Spring容器
      • JavaBean
      • POJO
      • @Autowired
      • @Controller
      • @Resource
      • @RestController
      • @Service
      • @Repository
      • @Mapper
      • @Component
      • @Entity
      • @Transactional
      • @Bean
      • @ResponseBody
      • @RestController
      • @RequestMapping
      • @PathVariable
      • @RequestParam
      • @RequestBody
      • @Value
      • @SpringBootApplication
      • @ConfigurationProperties
      • @Configuration
      • @Import
      • @ComponentScan

本文集各家之长而成,便于大家对SpringBoot的学习


Spring容器

一切Spring bean都存储在Spring容器内,并由其通过IoC技术管理。
一个Spring容器就是某个实现了ApplicationContext接口的类的实例。

911a55a191002bc7d23a7a014bec7e1d.png

JavaBean

Java Bean是一套模式或约定,这些约定包括getXxx、setXxx、isXxx、addXxxListener、XxxEvent等。遵守上述约定的类可以用于若干工具或库。
规范如下:

  • 有一个public的无参数构造器。
  • 属性可以通过get、set、is(可以替代get,用在布尔型属性上)方法或遵循特定命名规范的其他方法访问。
  • 可序列化。

POJO

Plain Ordinary Java Object,通指没有使用Entity Beans的普通java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。可以把POJO作为支持业务逻辑的协助类。
POJO实质上可以理解为简单的实体类,顾名思义POJO类的作用是方便程序员使用数据库中的数据表,对于广大的程序员,可以很方便的将POJO类当做对象来进行使用,当然也是可以方便的调用其get,set方法。
这个类没有实现/继承任何特殊的java接口或者类,不遵循任何主要java模型,约定或者框架的java对象。在理想情况下,POJO不应该有注解。

@Autowired

可以对类成员变量、方法及构造函数进行标注,将Spring容器中的bean自动地和我们需要这个bean的类装配在一起。是一个用于容器(container)配置的注解。

  • 在使用@Autowired时,首先在容器中查询对应类型的bean
  • 如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据
  • 如果查询的结果不止一个,那么@Autowired会根据名称来查找。
  • 如果查询的结果为空,那么会抛出异常。解决方法是:使用required=false
  • 可以提供了一个@Qualifier(“xxx”)标记,来指定需要装配bean的名称
// 初始化时,在spring容器中寻找一个类型为UserService的bean实体注入,关联到userService
@Autowired
private UserService userService;// UserService接口存在多个实现类,在spring注入时会报错
public class UserService1 implements UserService
public class UserService2 implements UserService
//改成以下方式:
@Autowired
private UserService userService1;
@Autowired
@Qualifier(value = "userService2")
private UserService userService3;

@Controller

控制器,注入服务。用于标注控制层,相当于struts中的action层。通常是被使用服务于web 页面。默认你的controller方法返回的是一个string 串,是表示要展示哪个模板页面或者是要跳转到哪里去。
把本类交给Spring容器管理,在Spring容器中会存在一个对应名字(类名首字母小写)的action,可指定其value修改。
标注类的方法,return时会被视图处理器识别成静态文件的路径。默认为templates文件夹下。如return "test/hello"表示的是默认路径下的test文件夹中的名叫hello的文件,带上后缀名.html或btl等也可以识别。

@Resource

这个注解属于J2EE的,默认按照名称进行装配,名称可以通过name属性进行指定。

@Resource(name="baseDao")     
private BaseDao baseDao;

@RestController

专门用在编写API的时候,特别那种返回一个JSON,或者是XML等等。方法返回的可以是一个对象,或是一个可以被序列化的对象。

@Service

服务层(业务, service, manager层)。主要用来进行业务的逻辑处理。

@Repository

持久层(DAO层)。实现dao访问。用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件。DAO直接负责数据库的存取工作。
Repository居于业务层和数据层之间,将两者隔离开来,在它的内部封装了数据查询和存储的逻辑。

@Mapper

与@Repository功能一样,且都是注解在DAO上。
@Repository需要在Spring中配置扫描地址,然后生成Dao层的Bean才能被注入到Service层中。
@Mapper不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。
给mapper接口自动生成一个实现类,让spring对mapper接口的bean进行管理,并且可以省略去写复杂的xml文件(也可以写)。

@Component

把普通pojo实例化到spring容器中。泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。在你确定不了是哪一个层的时候使用。
被注解的这个类是从Spring容器中取出来的,那调用的实现类也需要被Spring容器管理,加上@Component。
@Component用于我们的类,它只有在我们的SpringBoot应用程序启用了组件扫描并且包含了我们的类时才有效。
通过组件扫描,Spring将扫描整个类路径,并将所有@Component注释类添加到Spring Context(具有可调整的Filtering)。
让Spring发现了bean。

@Entity

对实体类注释。任何Hibernate映射对象都要有这个注释。
必须与‘主键@Id’注解结合使用,通常和‘数据表名@Table’结合使用。
实体类主要是作为数据管理和业务逻辑处理层面上存在的类别。他们的主要目的是存储数据并提供对这些数据的访问。 在很多情况下,实体类是持久的。

@Transactional

开启事务,在service层添加事务是非常有必要的。
先在 xml 中配置事务信息;再将@Transactional 注解添加到合适的方法上,并设置合适的属性信息。

@Bean

@Bean与配置类(使用@Configuration)一起工作,因此使用在基于配置中。也可用在配置类的方法中。告诉Spring将方法返回的任何内容添加到Spring Context中。
默认情况下,它将使用方法的名称作为bean的id / name(类似XML配置:bean id=xxxx)。另一种方法是,您可以在@Bean注释中指定它。
产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
明确声明了bean。SpringIOC 容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建,在一个方法上使用@Bean注解就表明这个方法需要交给Spring进行管理。

@Configuration
public class AppConfig {// 使用@Bean 注解表明myBean需要交给Spring进行管理// 未指定bean 的名称,默认采用的是 "方法名" + "首字母小写"的配置方式@Beanpublic MyBean myBean(){return new MyBean();}
}public class MyBean {public MyBean(){System.out.println("MyBean Initializing");}
}

@ResponseBody

可以标注方法也可以标注类。
当标注方法时表示该方法的返回值会被解析成json,直接写入HTTP Response Body中,视图处理器将不会把return的参数识别成路径。
当它标注类时,类中所有方法的返回值都将直接返回值到页面,相当于给类中所有的方法都加上@ResponseBody注解。

@RestController

是@Controller和@ResponseBody的结合体,只能注解类,return返回的值将被转换成json,字符串除外,直接写入HTTP相应体返回到页面中。

@RequestMapping

可以注解类也可以注解方法,注解类时标注请求的路径,标注方法时表示将特定的URL映射到指定的方法。
类似的还有@GetMapping、@PostMapping、@PutMapping、@PatchMapping、@DeleteMapping

@PathVariable

参数注解。
用于获取URL中的参数:一般{ }中的变量名与方法中的形参名一致(可以不加@PathVariable注解);

@RequestMapping(value = "/test/{name}" ,method = RequestMethod.GET)
public String Hello(@PathVariable String name) {
System.out.println(name);
return "/index.html";

如果名称不一致则写成:(否则不单单是获取不到参数,连方法都不执行!)

@RequestMapping(value = "/test/{name}" ,method = RequestMethod.GET)
public String Hello(@PathVariable("name")String userName) {
System.out.println(userName);
return "/index.html";

@RequestParam

用来处理Content-Type为application/x-www-form-urlencoded(默认类型如果不指定),使用value属性可以指定获取参数的key。

// 变量名和查询字符参数一样
// GET /users?count=10
@GetMapping("/users")
public List<User> index(@RequestParam int count) {...}// 变量名和查询字符参数不一样
// GET /users?num_per_page=50
public List<User> index(@RequestParam("page") int numPerPage) {...}

@RequestBody

一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据,在GET请求中没有请求体所以一般不适用,在post请求中必须指定Content-Type后才能使用它,如ajax请求指定发送格式为application/json。

// 捕获前端发送过来的JSON串
@PostMapping
public User create(@RequestBody UserCreateRequest request) {...}

@Value

@Value(“#{}”) 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量

@Value("#{1}")  
private int number; //获取数字 1  @Value("#{'Spring Expression Language'}") //获取字符串常量  
private String str;  @Value("normal")
private String normal; // 注入普通字符串@Value("#{systemProperties['os.name']}")
private String systemPropertiesName; // 注入操作系统属性@Value("#{dataSource.url}") //获取bean的属性  
private String jdbcUrl;  @Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber; //注入表达式结果@Value("classpath:com/hry/spring/configinject/config.txt")
private Resource resourceFile; // 注入文件资源

@Value(“${xxxx}”)注解从yml或properties或自定义属性文件中读取配置。自定义属性文件通过@PropertySource加载。

@Value("${init.password}")  private String initPwd;

@SpringBootApplication

@ComponentScan+@Configuration+@EnableAutoConfiguration

@ConfigurationProperties

将外部配置文件(比如test.properties/test.yml)加载进来,填充对象的对应字段的数据,然后供其他Bean使用。
@ConfigurationProperties 和 @value 有着相同的功能,但是 @ConfigurationProperties的写法更为方便test.yml:

environment:production:url: http://production.example.comname: production modedev:url: http://dev.example.comname: developer mode
@Configuration   //配置类注解,被自动扫描发现
@PropertySource("test.yml") //指明配置源文件位置
@ConfigurationProperties(prefix = "environment") //指明前缀

@Configuration

用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
@Configuration的第二个作用是可以作为配置类,和@Component的作用一样,两者的差别是@Configuration 中所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例。
@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的,作用为:配置spring容器(应用上下文)
使用@Configuration注解一个类表明该类可以被Spring IoC容器用作bean定义的来源。该@Bean注解告诉Spring与@Bean注释的方法将返回应注册为Spring应用程序上下文的bean的对象。最简单的@Configuration类可能如下:

@Configuration
public class HelloWorldConfig {@Bean  // 方法名用@Bean作为bean ID进行注释,并创建并返回实际的beanpublic HelloWorld helloWorld(){return new HelloWorld();}
}

以上代码将等同于以下XML配置:

<beans><bean id = "helloWorld" class = "com.breakyizhan.HelloWorld" />
</beans>

@Import

允许从另一个配置类加载@Bean定义。

@Configuration
public class ConfigA {@Beanpublic A a() {return new A(); }
}@Configuration
@Import(ConfigA.class)
public class ConfigB {@Beanpublic B a() {return new A(); }
}

现在,在实例化上下文时,不需要同时指定ConfigA.class和ConfigB.class,只需要按如下方式提供ConfigB:

public static void main(String[] args) {ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigB.class);// now both beans A and B will be available...A a = ctx.getBean(A.class);B b = ctx.getBean(B.class);
}

@ComponentScan

注解在类上,扫描标注了@Controller等注解的类,注册为bean 。
@ComponentScan 为 @Configuration注解的类配置组件扫描指令。
@ComponentScan 注解会自动扫描指定包下的全部标有 @Component注解的类,并注册成bean,当然包括 @Component下的子注解@Service、@Repository、@Controller。

// 扫描路径
@ComponentScan(value = "spring.annotation.componentscan")// 指定扫描类
@ComponentScan(basePackageClasses = {BookDao.class, BookService.class}

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

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

相关文章

3. Recursive AutoEncoder(递归自动编码器)

1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder&#xff08;递归自动编码器&#xff09; 4. Stacked AutoEncoder&#xff08;堆栈自动编码器&#xff09; 1. 前言 今天主要介绍用在NLP中比较常见的AutoEncoder的模型&#xff0c;Recursi…

python语言语块句的标记_NLTK基础教程学习笔记(十一)

语块分解例子&#xff1a; from nltk.chunk.regexp import * import nltk test_sent"The prime minister announced he had asked the chief government whip, Philip Ruddock, to call a special party room meeting for 9am on Monday to consider the spill motion.&qu…

Excel的VBA连接数据库方法

Sub GetData() Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.Recordset Dim col As Integer 清空电子表格的所有数据 Cells.Clear 连接数据库的字符串 strConn "ProviderSQLOLEDB.1;Persist Security InfoTrue;User IDnam…

Python基础4

本节内容 列表、元组操作字符串操作字典操作集合操作文件操作字符编码与转码 1. 列表、元组操作 列表是我们最以后最常用的数据类型之一&#xff0c;通过列表可以对数据实现最方便的存储、修改等操作 定义列表 1names [Alex,"Tenglan",Eric]通过下标访问列表中的元素…

Catalan数(卡特兰数)

公式&#xff1a; n < 2 时&#xff0c; f(n) n; n > 2时&#xff0c; f(n) (4n - 2) / (n1) * f(n-1) 1-100的卡特兰数列表如下&#xff1a; n f(n) 1 1 2 2 3 5 4 14 5 42 6 132 7 429 8 1430 9 …

linux unix域socket_Socket通信原理

对TCP/IP、UDP、Socket编程这些词你不会很陌生吧&#xff1f;随着网络技术的发展&#xff0c;这些词充斥着我们的耳朵。那么我想问&#xff1a;1. 什么是TCP/IP、UDP&#xff1f;2. Socket在哪里呢&#xff1f;3. Socket是什么呢&#xff1f;4. …

LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 问题说明&#xff1a;当安装VS2012之后&#xff0c;原来的.NET 4.0会被替换为.NET 4.5。卸载VS2012时&#xff0c;不会恢复.NET 4.0。 l 当VS2012安装后&#xff0c;VS2010的cvtres.exe就无法使用了。…

NPOI打印设置

打印设置主要包括方向设置、缩放、纸张设置、页边距等。NPOI 1.2支持大部分打印属性&#xff0c;能够让你轻松满足客户的打印需要。 方向设置首先是方向设置&#xff0c;Excel支持两种页面方向&#xff0c;即纵向和横向。 在NPOI中如何设置呢&#xff1f;你可以通过HSSFSheet.P…

HDOJ 1030 Delta-wave

题目&#xff1a;Problem DescriptionA triangle field is numbered with successive integers in the way shown on the picture below. The traveller needs to go from the cell with number M to the cell with number N. The traveller is able to enter the cell through…

工厂模式个人案例_工厂设计模式案例研究

工厂模式个人案例我有一份工作来检查我们的项目代码质量。 如果我在项目中发现任何障碍&#xff0c;必须将其报告给我的团队负责人。 我发现了很多漏洞&#xff0c;我认为可以在博客上进行讨论。 不是嘲笑作者&#xff0c;而是一起学习和改进自己。 像这段代码一样&#xff0c;…

用Matlab实现字符串分割(split)

我们在这里借助正则表达式函数regexp的split模式。一般语法&#xff1a; S regexp(str, char, split) 其中str是待分割的字符串&#xff0c;char是作为分隔符的字符&#xff08;可以使用正则表达式&#xff09;。分割出的结果存在S中。 以下面这样一串字符为例 Hello N…

阅读笔记:基础知识(Java篇)

1. GC机制&#xff08;垃圾回收机制&#xff09; 找到垃圾的方法&#xff1a;引用计数法、可达性分析法 回收垃圾的方法&#xff1a;标记清除算法、复制算法、标记整理法、分代算法2. JVM内存划分 线程私有&#xff1a;程序计数器、JVM虚拟机栈、本地方法栈线程公有&#xff1a…

oracle和mysql数据实时同步_异构数据源的CDC实时同步系统——最终选型实战

引言&#xff1a;《异构数据源的CDC实时同步系统》 系列第一篇 (已完成)《零编码打造异构数据实时同步系统——异构数据源CDC之2》 系列第二篇(已完成)《零编码打造异构数据实时同步系统——异构数据源CDC之3》 系列第三篇(已完成)《异构数据源的CDC实时同步系统——最终选型实…

使用DynamoDBMapper插入DynamoDB项目

在上一篇文章中&#xff0c;我们使用DynamoDBMapper来将DynamoDB表映射到Java对象。 插入时&#xff0c;我们的动作几乎相同&#xff0c;但是方式更方便。 为了插入项目&#xff0c;您要做的就是使用对象映射器持久化对象 在我们的例子中&#xff0c;我们将创建一个执行简单插…

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器,sqlserver

今早开机发现&#xff0c;打开SQL Server 2008 的 SQL Server Management Studio&#xff0c;输入sa的密码发现&#xff0c;无法登陆数据库&#xff1f;提示以下错误&#xff1a; “在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请…

matlab 与数据库操作

第一部分&#xff1a;读取数据其相关信息查看 1. 配置数据源 &#xff08;1&#xff09;.“控制面板”----“管理工具”——“数据源&#xff08;ODBC&#xff09;”——“添加”——“创建数据源名称和选择数据库文件”。具体操作见数据源配置&#xff1a; http://blog.c…

PHP05

php05 1、音乐案例删除部分 1&#xff09;通过执行某些PHP代码获取到指定的数据&#xff0c;填充到html的指定位置 accept属性也可以直接写扩展名,多个扩展名间用英文的逗号分隔 accept".lrc" 允许选中多个文件&#xff0c;文件域属性&#xff1a;multiple 直接写该属…

算术运算导致溢出_CPU的控制器与运算器

计算机基础方面的知识&#xff0c;对于一些非科班出身的同学来讲&#xff0c;一直是他们心中的痛&#xff0c;而对于科班出身的同学&#xff0c;很多同学在工作之后&#xff0c;也意识到自身所学知识的不足与欠缺&#xff0c;想回头补补基础知识。关于计算机基础的课程很多&…

Windows下,Netbeans使用C++的配置方法

如果尚未安装 NetBeans IDE&#xff0c;请转至http://www.netbeans.org/community/releases/&#xff0c;然后下载包含最近的 C/C 支持的 IDE 版本。 如果已安装 NetBeans IDE 但未包含 C/C 支持&#xff0c;请完成以下步骤为 IDE 添加 C/C 支持。 从主菜单中选择“工具”>“…

为了简单起见,Arquillian Chameleon

使用Arquillian时&#xff0c;您需要做的一件事就是定义要在哪个容器下执行所有测试。 这是通过在适配器的类路径中添加依赖项并取决于所使用的模式&#xff08;嵌入式&#xff0c;托管或远程&#xff09;来下载的来完成的。 手动安装应用程序服务器。 例如&#xff0c;当在嵌…