springboot有一个最重要的注解,@SpringbootApplication,点进去查看,它是一个组合注解,里面有三个注解,@Spring boot Configuration、@ComponentScan、@EnbleAutoConfiguration,其中@EnbleAutoConfiguration最为重要,点进去它里面有一个@Import的注解,里面有一个类,有一个方法selectImports,里面会读取META-INFO下面spring.factories所有需要自动装配的文件,然后会通过META-INFO下面的auto configuration-metadata.properties进行过滤,最后返回的才是需要自动装配的一些对象;
自定义stater操作成功!

操作步骤:
1.模仿其他依赖,首先导入springboot两个相关的依赖,
2.编写业务,然后交给ioc容器;
3.在resources文件下新建META-INFO文件夹并在META-INFO下面新建spring.factories文件,配置文件的全限定名;
4.最后install打成jar包,在其他依赖中导入即可使用;
1.模仿其他依赖,首先导入springboot两个相关的依赖,
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>2.0.5.RELEASEversion>
- parent>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starterartifactId>
- dependency>
- dependencies>
2.编写业务,然后交给ioc容器;
- //业务类
- public class Print {
-
- public void myPrint(String msg){
- System.out.println("这是我自定义打印的信息:"+msg);
- }
- }
-
-
-
-
-
- -----------------------------------------------------------------------
- //配置类
-
- @Configuration
- public class PringConfig {
-
- @Bean
- public Print print(){
- return new Print();
- }
- }
3.在resources文件下新建META-INFO文件夹并在META-INFO下面新建spring.factories文件,配置文件的全限定名;

4.最后install打成jar包,在其他依赖中导入即可使用;

在其他类中导入,测试即可!!!
CAS(比较并交换):自旋锁,也是属于一种乐观锁;
属于JUC包,一个do while 优雅的解决了并发的问题;底层代码如下:
- public final int getAndAddInt(Object var1, long var2, int var4) {
- int var5;
- do {
- var5 = this.getIntVolatile(var1, var2);
- } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
-
- return var5;
- }
参数描述:
var1:该对象本身;
var2:该对象值的引用地址;
var4:需要增加或者修改的变量;
var5:用var1和var2再内存中找到的真实的值;
this.compareAndSwapInt(var1, var2, var5, var5 + var4);
把var1和var2与var5进行比较,如果相同则返回var5+var4;
如果不同则继续取值再比较,直到相等为止;
乐观锁会出现的问题:ABA问题;
如果A是 AUser1对象,进行比较交换后换成了BUser1对象,又比较交换成了AUser2,对象,此时AUser2对象就不是之前那个AUser1对象了,这就是常见的ABA问题;
解决方法:加版本号;在每次更新的时候把版本号加一,例如A B A-->A1 B2 A3;