记录笔记。
给亲友看的笔记,干劲十足(希望她看得懂,因为我不会教人)
一.重要前提
再次强调:springboot是为了优化spring的冗重的xml文件配置,spring的注解会更加丰富,但是springboot的思想还是跟着spring走。
spring的重要思想是:
说到容器,就必须要讲到一个东西Bean,按照我的理解,可以把Bean这个东西当成一个类(话说java的确实应该是类),容器使用的都是Bean实例,所以要将某个类(主要类)加入到容器里面,然后再在启动类里面使用方法(好像是getBean)在spring容器里面获得该主要类的Bean实例,获得Bean实例了才可以调用主要类的方法。
springboot也是差不多的,它需要一个Bean实例,而这个Bean实例可以抽象地认为和自定义编写的类是有关的,只要有对应类(主要类)的bean实例,就可以实现里面的方法。bean实例可以认为是由自定义编写的类的实例抽象(不用思考具体实现)转化来的。
先按照书本上的来:
二.全局配置文件和属性注入
配置文件有两种,application.properties和application.yml,如果没有yml文件那么可以自己新建一个,properties后缀比yml后缀优先级要更高点,所以两个文件都有的话,建议使用yml文件注释掉properties文件内容。
配置文件一般是用来属性注入的(也就是设置主要类的属性值),可能有别的用法但是这里就先理解到这里就行了。
说到属性注入,有两种方式,一种是使用注解@Value和注解@ConfigurationProperties。
@value方式:
这里参考以下spring架构程序的写法,spring架构的主要写法(我自己总结的)是主要类+xml配置+测试类(启动类),主要类可以理解成自定义编写的类。
那么springboot架构的写法或许可以简易理解成主要类+properties/yml + 测试类。
主要类:(主要类建立在src/main/java/某个包里面,主要类结构等级必须比启动类的低)
可以发现有一个@Value注解,观察格式。
还可以发现有一个@Component,这个注解作用是将某一个主要类作为组件加入spring容器,好让该主要类可以通过自己的实例来获得对应的Bean实例(我习惯说成Bean相关主要类)
properties/yml文件(结合主要类的@Value注解看):properties文件
或者是yml文件
properties和yml文件是有各自的格式的,注意观察,注意yml文件属性和值之间是有一个空格的。
properties格式示例:
yml文件格式示例:
在行内式和缩进式选一种即可,我选的是行内式,如果是数组(包括List)那么就是使用[],如果是map那么就使用{},其他一概什么都不用,不用双引号直接输入值就可以了。
话题转回来,yml和properties讲完后就是下一步测试类了。
测试类(启动类):(spring是三部曲,这里两部曲就可以了)
两部曲第一:使用Autowired注解将某一个类放进容器里面生成自己的实例然后再生成一个Bean实例,先遮掉这个注解不要看,会发现就是一个普通的声明语句,类的实例都没有,再把这个Autowired放出来,会发现这个类有了实例了(通过properties/yml文件和Compoent注解,Compoent注解使它得知可以生成什么类的实例)还生成了相关的Bean实例使得容器可以调用这个方法(spring容器用的是Bean实例,Bean实例用来调用主要类的方法),注意区分Compoent等类似注解,它们的作用是可以生成Bean实例而不是生成Bean实例。
两部曲第二:调用自己的方法,如果是测试方法那么加个@Test即可,如果是启动类那么直接调用即可。
然后注意测试类一定要加上RunWith和SpringBootTest。
@ConfigurationProperties属性注入方式:
和Value方式有差异的地方是主要类的编写,因此这里就只放主要类部分。
主要类:
注意一定要有对应的set和get和toString方法,可以使用@Data简化。
两者的区别:
三.补充内容
老师在课上不仅仅说过这些,以下是补充内容。
我们刚才讲的都是属性注入,是形成一个空间(也就是实例)然后将属性值放进去。我们的主要类实例一般是Autorwied帮忙生成的,其实生成实例还有一种方式,使用配置类,使用配置类的话主要类(自己编写的类)会多一个Config
配置类:
主要类1,对我们之前的Cat类编写一个CatConfig类。
配置类由构造方法来创建实例,name的值仍然由properties/yml文件@获得(毕竟现在允许你们知道的知识就是他们是用在属性注入的),既然用到构造方法,那么就得去Cat类加入构造方法,这里使用Bean注解标识生成的实例可以让Autoriwed注解生成Bean实例,毕竟原先是Autoriwed负责生成主要类实例然后再生成Bean实例,把主要类实例给了配置类做那么就需要知道该实例需不需要生成Bean实例了嘛,没错,并不是每一个主要类(自己编写的类)都需要生成Bean实例,生成Bean实例的大头还是为了使用方法,如果某类里面只有属性的话且是为了其他主要类服务的话可以不用写@Bean注解,在spring里面我就遇到过)
要使用构造方法那么就可以Insert+alt快捷键,或者可以使用@AllArgsConstructor和@NoArgsConstructor注解,意思都在代码里面写了。这里需要注意的是,Compoent注解不用写了,它有一个作用是等待spring扫描器扫过来的时候提醒容器可以生成该类的实例,但是实例我们自己生成了,所以这里不要写。
yml文件和properties文件:照旧,省略。
测试类(启动类):(注意事项都写在注解里面了。
在启动类里面除了使用Autowired注解来使用,也可以直接使用ApplicationContext容器。如果使用该容器,默认所有Bean实例都已经生成了(不需要Autowired生成了)
示例代码:
再在这里衍生一下,如果想要在开始测试时候输出创建前和销毁后的两句话,建议看这个博客:
https://blog.csdn.net/qinwuxian19891211/article/details/109004937 课堂思考,不建议观看:springboot的属性注入是value和C……,复习一下,springboot不需要xml文件,所以配置是在properties
ConfigurationProperties注解需要Data注解
//Configuration告诉spring容器是一个配置,可以作为组件来着,目前来看CatConfig是一个返回Cat实例的东西,
//配置类,配置类里面的cat方法是返回一个实例,也就是说,entity的Cat类不需要compoent作为bean放进容器,在这里的cat加上Bean代替compoent即可。
//也就是说,Compoent加上value和ConfigurationProperties,Cat类自己返回实例
//也可以,配置类里面返回Cat类实例+Bean注解,Cat类只是一个获取值的单纯的类而已。(Cat类需要用注解来省略构造函数,因为在这里new Cat就一定要用到Cat的构造函数
//构造函数需要的值就可以直接在这里声明,使得name只依赖application.yml而脱离Cat类(Springboot和spring记得区分开来,springboot不是用xml文件)
public class CatTest02 {
//这里使用这个注解是将Cat放进spring容器,其实是将配置类实现的实例放进这里的Cat,所以构造函数和这里的变量名字得是一样。
@Autowired
Cat cat;
//这里的变量名要和配置类里面的构造函数的名字是一样的,因为其实是那个实例进spring容器,为了改名不要那么麻烦,使用注解Q,Qualifier把值当成候选值
@Autowired @Qualifier("cat2")
Cat c2;
//也可以用R注解来代替A+Q注解
// @Autowired @Qualifier("cat2")
@Resource(name = "cat2")
总结以下配置类获得Cat实例(从而获得Bean实例)的方法:
配置类获得实例,Cat类获得值,yml文件,测试类。
如果使用配置类的话,除了常类做法(会记录到博客里面去),还可以这么写:
//使用ApplicationContext,直接搞到容器,下面的代码很容易理解
ApplicationContext applicationContext;
@Test
public void test03(){
//1.和spring差不多的做法
Cat c;
c = (Cat) applicationContext.getBean("cat2") ;//同样的,为了获得bean相关cat实例,这里是通过构造函数的名字来写的
// //或者
// c = applicationContext.getBean("cat2",Cat.class) ;
System.out.println(c);
// //2.for循环做法
// String[] names = applicationContext.getBeanDefinitionNames();//获得一堆bean名称(获得一堆bean指针)
// for (int i = 0; i < names.length; i++) {
// System.out.println(names[i]);
// }
// //下面的代码可以用来简洁代替for
// System.out.println(Arrays.toString(names));
}
四.待定
生病了不舒服,待定。标签:spring,boot,企业级,Bean,实例,注解,Cat,yml From: https://www.cnblogs.com/clina/p/18085271