SpringBoot
SpringBoot 原理篇
文章目录
- SpringBoot
- SpringBoot 原理篇
- 1 自动配置
- 1.1 bean 的加载方式【一】
- 1.1.1 环境准备
- 1.1.2 第一种方式
- 1.1.3 第三方bean
1 自动配置
1.1 bean 的加载方式【一】
1.1.1 环境准备
创建一个新的工程模块【Maven 的,不是SpringBoot 的】
直接创建
OK,一个全新的Maven 工程
【添加坐标】
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.23</version>
</dependency>
</dependencies>
记得刷一下
创建新的bean 类
再整一套业务层的东西
业务层接口
package com.dingjiaxiong.service;
/**
* ClassName: BookService
* date: 2022/10/24 10:34
*
* @author DingJiaxiong
*/
public interface BookService {
void check();
}
实现类
package com.dingjiaxiong.service.impl;
import com.dingjiaxiong.service.BookService;
/**
* ClassName: BookServiceImpl1
* date: 2022/10/24 10:35
*
* @author DingJiaxiong
*/
public class BookServiceImpl1 implements BookService {
@Override
public void check() {
System.out.println("book service 1..");
}
}
复制出三个差不多的实现类
package com.dingjiaxiong.service.impl;
import com.dingjiaxiong.service.BookService;
/**
* ClassName: BookServiceImpl1
* date: 2022/10/24 10:35
*
* @author DingJiaxiong
*/
public class BookServiceImpl2 implements BookService {
@Override
public void check() {
System.out.println("book service 2....");
}
}
package com.dingjiaxiong.service.impl;
import com.dingjiaxiong.service.BookService;
/**
* ClassName: BookServiceImpl1
* date: 2022/10/24 10:35
*
* @author DingJiaxiong
*/
public class BookServiceImpl3 implements BookService {
@Override
public void check() {
System.out.println("book service 3......");
}
}
package com.dingjiaxiong.service.impl;
import com.dingjiaxiong.service.BookService;
/**
* ClassName: BookServiceImpl1
* date: 2022/10/24 10:35
*
* @author DingJiaxiong
*/
public class BookServiceImpl4 implements BookService {
@Override
public void check() {
System.out.println("book service 4........");
}
}
这样儿差不多准备工作就完成了
1.1.2 第一种方式
Spring 刚出现的时候,它提供的最早的bean 的声明方式就是通过xml 的方式进行声明
来一个配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 通过xml的方式声明自己开发的bean -->
<bean id="cat" class="com.dingjiaxiong.bean.Cat"/>
</beans>
编写程序运行它
package com.dingjiaxiong.app;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* ClassName: App1
* date: 2022/10/24 10:43
*
* @author DingJiaxiong
*/
public class App1 {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext1.xml");
Object cat = ctx.getBean("cat");
System.out.println(cat);
}
}
运行结果
这就可以说明cat 这个bean 已经初始化成功了
当然定义时其实也可以不用写 id
<!-- 不写id -->
<bean class="com.dingjiaxiong.bean.Dog"/>
OK,直接拿一下
Dog dog = ctx.getBean(Dog.class);
System.out.println(dog);
运行结果
OK,没毛病
还有一个小操作,可以一次性到位
String[] names = ctx.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
执行结果
cat 是配置文件中bean的id,下面的狗是一个全路径的类名,后面还跟着一个 #0
,意思就是编号,如果我有四个
就是这样
1.1.3 第三方bean
添加一个依赖坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.11</version>
</dependency>
<!-- xml方式声明第三方开发的bean -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"/>
同样直接运行
OK,xml 方式声明bean 差不多就是这样,
回顾一下
- XML方式声明bean
这种方式的优点:
- 全在一个文件中,一目了然
缺点:
- 写起来麻烦