美文网首页
springboot初入笔记

springboot初入笔记

作者: codeflame | 来源:发表于2018-09-24 13:41 被阅读0次

1.springboot是spring的自动配置,spring本身仍是核心。

2.POJO:就是平时熟知的javabean,主要是为了与EJB的javabean区分

3.IoC(反转控制)容器:可以当作管理javabean的工厂。
工厂思想:动态管理、提供对象。如一开始30个http请求抵达时新建30个对象,结束后不一定回收对象而是保留(类似于缓冲池);下次10个请求抵达时取出其中10个使用(就是拿来复用),无需再新建对象、分配内存,提高效率。所谓的javabean放入容器,大概就是让spring了解如何生成一个对象后,让它来充当上述的“工厂”。
因此后续需要使用时,可以通过getBean(id)这个方法来获取对象,而非直接new。

4.java注解:详情百度,类似于元编程,提供对代码本身处理的能力。使用注解,能让spring识别你的代码并予以处理

5.mvc:这个v指视图,指jsp之类的(通俗点就是可以执行java代码html)。m指model,指送向视图的对象。如原来单纯的的jsp中,想要读取服务器中的txt文件,需要在jsp中写java代码;但在mvc中,可以在c(controller)中把读取的结果放入String str中,包装到model对象上,指定送入的视图(hellp.jsp之类的),然后在视图直接引用${str}即可显示结果,实现逻辑代码与视图显示的分离。


bean放入容器管理的几个注解

@Component:
把该类放入容器管理(如果被spring扫描到)。(其参数value等同spring配置文件的id,默认为类名首字母变小写的骆驼峰式)

@Configuration:
该注解含有@Component注解,因此本身也会被纳入管理。
作用等同与spring的xml配置文件:本身等同<beans>标签;内部的@Bean注解的方法等同<bean>,方法名默认等同"id"属性,方法返回值(对象)默认等同"class"属性

@Import:
@Import( {Cat.class, Dog.class} ),就是把Cat类和Dog类纳入管理。

@ImportResource:
@ImportResource( {locations = {"a.xml, b.xml"} )就是加载a.xml, b.xml为spring的配置文件,相当于回退到以前直接写配置文件那样

所以,把某个类(javabean)放入容器的方法有:
1.直接在类中加@Component注解(若类比较分散,维护时容易懵逼)

2.写一个配置类(其作用主要就是为了配置,并无他用)用@Configuration注解,内部成员方法用@Bean注解(这个应该是推荐写法吧?)

3.启动类追加@Import注解(如果不在启动类的context范围内使用当我没说),把类.class作参数即可

4.启动类追加@ImportResource注解,像写spring配置文件那样操作就行。(不推荐)


@SpringBootApplication 注解启动类

标记启动类。所谓启动类,大概作用就是能用它访问尽所有的javabean及其它必须的东西。
内含3个主要的功能:
@ComponentScan:
上面说到的扫描,就是由这个扫描。它去扫描那些注解,不被扫描到的注解就无效。(即类使用了@Component,但若在另一个不被扫描的包中,此类不会被放入容器)
@SpringBootConfiguration:
本身就被@Component,因此也被纳入管理。主要作用是根据扫描把本身所在包及子包所有类(有适合的注解那些),放入容器管理
@EnableAutoConfiguration:
第三方(就是你通过工具/手动添加的jar依赖)的类也被加入容器。

所以,被@SpringBootApplication注解的类,能够把所有子包及所在包的类,根据其注解进行适当的处理,也就被称为启动类。


@ConfigurationProperties和@Value注入值

1.根据application.yml(以yml作例)注入值。yml是json超集,其格式采用key: value(冒号后面的空格不能缺)表示键值对,采用缩进表示层次。
若值为字符串,双引号可以省略,可以使用单引号(没什么用);使用双引号包括字符串时,转义字符\n之类的才有效,否则直接输出\n。
若值为数组、集合、list,可直接以[1,2,3,4]为值解决。
若值为map或对象,可直接以{a: a,b: b}为值解决。(冒号后面的空格不能缺)

2.@ConfigurationProperties注解在类,@Value注解在类成员。

3.@ConfigurationProperties(prefix = "指定前缀"),要求类的成员和yml写的名称对应(能够以松散写法对应),这个注入将覆盖@Value注入

4.@Value("${指定前缀.指定成员}"),此时指定成员和类的成员名称便不需要对应了。可以使用@Value("${指定前缀.指定成员:默认值}")来实现yml中指定成员不存在时注入默认值。

5.流程为:@Configuration+@Bean--->@Component--->注入值
整个流程只有一个对象,因此注入值将覆盖前面设置的值。
注:@Configuration+@Bean和@Component只有要一个即可完成新建对象,两个都写也没问题,但始终整个流程保持新建一个对象

6.yml也能使用${指定前缀.指定成员}来引用另外一个值

7.@PropertySource:
@PropertySource(value = "classpath:myconf.properties")注解在类,指定properties文件(默认是application.yml和application.properties)来获取注入值(不支持yml)。这里classpath指的是编译结果目录classes下(源代码中的properties/yml编译时将被复制到classes目录下)


@Controller 注解“控制”类
@RequestMapping 设置请求url的映射

1.@Controller中有@Component,因而受IoC容器管理,其参数value也就同@Component的value参数

2.@RequestMapping 设置在方法上,意为url路径对应时映射到该方法上。设置在控制类时,作用是使控制类的方法的路径映射变为相对路径的映射。

3.路径斜杠/问题:
(1)这两个注解的字符串参数中,第一个字符可以不为斜杠,也可以写上斜杠,是一样的。
(2)设置返回的view路径时,返回的view均是以根路径开始的,首字符是不是斜杠都是一样的。
(3)设置返回的return "redirect:xxx.html"时,首字符为斜杠则以根路径开始;没有斜杠则为相对路径,父路径为@Controller的参数。

4.静态资源与模板引擎:
(1)static中的html可以直接通过url访问;模板中的html不可直接通过url访问(404错误)
(2)mvc中,最终到达view时,url是不会改变的;如果返回的是重定向return "redirect:xxx.html",url会改变进行跳转,此时不会到达view

5.url中的路径参数{prama},捕获的路径参数是不会跨越/的。即/a/{prama}不会匹配/a/b/c

6.@GetMapping,其实就是@RequestMapping(method=RequestMethod.GET),其余@PostMapping等等均是同理。

7.更多详细mvc相关注解,右转大佬:springmvc常用注解标签详解


HandlerMethod(即Controller中的处理方法)的参数注入相关

上面大佬文章已经很详细,这里补几个:

1.方法的参数可以直接写上一个自定义的javabean,spring将把post/get方式传入的参数按“name属性”对应注入javabean对象同名成员中。如果成员不是简单类型,那么只要form中的标签的namexxx.xxx表示层次即可完成对应。

2.大佬文章说的RequestToViewNameTranslator类,最终效果就是根据@RequestMapping的value当作viewName。

3.启动时可以参数覆盖.properties设置,如java -jar filename.jar --server.port=9090即可改变端口

相关文章

网友评论

      本文标题:springboot初入笔记

      本文链接:https://www.haomeiwen.com/subject/eqwcoftx.html