JavaWeb学习日记(十三)Springboot原理+Bean管理
一、Springboot配置优先级
二、Bean管理
获取bean:
package com.itheima;
import com.itheima.controller.DeptController;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
@SpringBootTest
class SpringbootWebConfig2ApplicationTests {
//获取bean对象
@Autowired
private ApplicationContext applicationContext; //IOC容器对象
@Test
public void testGetBean(){
//根据bean的名称获取
DeptController bean1 = (DeptController) applicationContext.getBean("deptController");
//声明一个bean对象没有指定名称,默认名称为类名(首字母小写)
System.out.println(bean1);
//根据bean的类型获取
DeptController bean2 = applicationContext.getBean(DeptController.class);
System.out.println(bean2);
//根据bean的名称 及 类型获取
DeptController bean3 = applicationContext.getBean("deptController", DeptController.class);
System.out.println(bean3);
}
}
声明一个bean对象没有指定名称,默认名称为类名(首字母小写)
bean作用域:
第三方bean:
如果第三方bean需要依赖其它bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配。
三、SpringBoot原理
起步依赖:
起步依赖原理:
依赖传递
自动配置:
自动配置原理:
方案一:ComponentScan组件扫描
方案二:Import导入
Import导入普通类:
Import导入配置类:
Import导入ImportSelector的实现类:
@EnableXxxx注解,封装@Import注解:

原理总结:
@Conditional注解:
@ConditionalOnClass:
@ConditionalOnMissingBean:
如果用户引入了这个依赖时,自己定义了这个bean,那就用自己定义的,否则就用依赖中的bean
@ConditionalOnProperty:
四、自定义starter(起步依赖)
五、总结
标准的三层架构:
Controller层负责接受请求,响应数据
Service层(业务层)负责业务逻辑的处理
Dao层(数据访问层/持久层)处理数据访问操作,完成数据库中的增删改查操作
前端发送请求到Controller层,Controller调用Service进行逻辑处理,Service再调用Dao层完成数据访问。
如果说在执行具体业务处理之前需要进行一些通用的业务处理,如进行统一的登录校验或者字符编码时,可以借助JavaWeb中三大组件中的过滤器Filter或者Spring中提供的拦截器Intercepter实现
为了实现三层架构层与层之间的解耦,学习了Spring框架中的第一大核心IOC与DI。
IOC控制反转:将对象创建的控制权由应用程序自身交给外部容器,即IOC容器或者Spring容器,声明为容器中的bean对象
DI依赖注入:指容器为程序提供运行时所需要的资源