Spring的Java配置相关注解、SpringBoot初学:项目结构及一些注解

声明bean的注解

  • @Service 在service层使用,在类上使用
  • @ Repository 在dao层使用,在类上使用

Java配置类相关注解

  • @Configuration 声明当前类是配置类,相当于Spring里的xml文件,用在类上
  • @ComponentScan 用来扫描(用于对Component进行扫描),在类上使用
  • @Bean 声明当前方法的返回值为一个bean,在方法上使用
  • @PropertySource可以指定读取的配置文件,用在类上
@PropertySource(value = "classpath:jdbc.properties")
  • @Import 注解,导入其他配置类,在类上使用
@Import(SpringDataSourceConfig.class)

getBean()

1.) 根据id属性获取,需要强转类型

  @Bean(name = {"xx"})
DataSource dataSource = (DataSource) context.getBean("xx");

2.)根据class属性获得对象,要确保同一种类型的bean只能配置一个

//类.class
DataSource dataSource = (DataSource) context.getBean(DataSource.class);

3.)根据bean元素的 id+class属性获得对象,要求id和类型一定要匹配正确

        User user3 = context.getBean("user", User.class);

SpringBoot

SpringBoot是什么?相当于一个工具,开发效率高,无需手动配置,内部帮内置好,能自动配置,有内嵌的tomcat;部署效率高【pom、jar、war】。

补充说明一些注解

  • @GetMapping

用于将HTTP get请求映射到特定处理程序的方法注解,@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。

  • @PostMapping

用于将HTTP post请求映射到特定处理程序的方法注解,@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写

  • @Controller

注解在一个类上添加@Controller注解,表明了这个类是一个控制器类。

  • @ResponseBody注解

@ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径。格式的转换是通过HttpMessageConverter中的方法实现的,因为它是一个接口,因此由其实现类完成转换。如果要求方法返回的是json格式数据,而不是跳转页面,可以直接在类上标注@RestController,而不用在每个方法中标注@ResponseBody,简化了开发过程。

  • @Controller和@RestController的区别

@Controller:在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面。若返回json等内容到页面,则需要加@ResponseBody注解

  • @RestController

@RestController = @Controller + @ResponeBody
相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

  • Spring Boot返回json数据用注解 @Controller + @ResponeBody或者@RestController,这两个注解依赖与jackson,加入starter-web

SpringBoot项目结构

第一部分:pom.xml文件

parent、插件不能删掉

  • starter是什么?

某个模块依赖的集合。eg:starter-web、starter-tomcat…

第二部分:配置文件

application.properties

当前项目的配置文件,能在里面修改端口…

application.yml

与.properties都是配置文件,但是写法不同,语法不同。比xml,语法更加简洁,比.properties文件更具有层次。

第三部分:配置文件SpringBoot的启动类

写代码的话要在这个启动类所在的包下写,(比如写dao、sercive这些)这样子才能扫描得到。

SpringBoot启动类相关注解

@SpringBootApplication

@springBootApplication注解是一个复合注解,主要有三个注解发挥了作用

  • @ComponentScan

扫描当前启动类所在的包,让spring boot自动扫描 @SpringBootConfiguration所在类的同级包以及它的子包中的配置。

  • @EnableAutoConfiguration

开启自动配置。(加载配置类,可以让spring boot根据当前应用项目所依赖的jar自动配置项目的相关配置。)

  • @SpringBootConfiguration

标记当前类为配置类,就像@Configuration

什么是SpringBoot自动配置

简单来说就是用注解来对一些常规的配置做默认配置,简化xml配置内容,使你的项目能够快速运行。

SpringBoot自动配置原理

(在autoconfigure包下)META-IF下的spring.factories。
SpringBoot通过@EnableAutoConfiguration注解开启自动配置,对jar包下的spring.factories文件进行扫描,这个文件中包含了可以进行自动配置的类,当满足@Condition注解指定的条件时,便在依赖的支持下进行实例化,注册到Spring容器中。

用自己话说:会扫描jar包下面的spring.factories文件,这个文件里配置了很多支持的制动配置类型;只要我们在项目中写到我们要用的,把依赖写好了,就会自动帮我们创建并放入容器中。

  • 自动配置原理
    • 读取spring-boot-autoconfigure包/META-INF/spring.factories
    • eg: DatasourceAutoconfiguration
      含义:自动配置DataSource
    • 条件:有导入了DataSource实现类的jar
    • 满足上面条件就会自动创建DataSource对象并放入容器中
      • 基本信息:如何给,在配置文件中
      • 优化信息:如何给,在配置文件中

关闭自动配置

加上exclude=xxAutoConfiguration.class排除某一个自动配置

//排除连接池的自动配置
@SpringBootApplication(exclude = DatasourceAutoConfiguration.class)

Starter是什么

某个模块依赖的集合

你可能感兴趣的:(java,spring,boot,spring)