1,如何理解spring boot中的starter
Starter是一种简化依赖管理和自动配置的核心机制,能快速集成特定功能模块,无需手动配置复杂依赖和xml文件。
- 依赖简化:将某个功能模块所需的所有依赖打包成一个“一站式”依赖,开发者只需引入一个 Starter,即可自动获取相关库及其兼容版本。
- 自动配置:基于条件注解自动配置Bean
- 约定优于配置:通过预定义默认行为减少代码配置,提高开发效率。(yml文件)
Starter 的工作流程 :引入依赖-依赖加载-依赖扫描-根据条件注解配置bean
-
引入 Starter 依赖:在项目中添加 Starter(如
spring-boot-starter-data-jpa
)。 -
依赖传递加载:Maven/Gradle 自动下载 Starter 及其所有传递依赖。
-
启动时扫描:Spring Boot 启动时扫描
META-INF/spring.factories
,加载 Starter 中的自动配置类。 -
条件化配置:根据当前环境(如类路径、已有 Bean、配置文件)动态决定是否启用配置。
-
生成默认 Bean:若条件满足,自动创建 Bean(如数据源、模板引擎)。
2,ApplicationContext和BeanFactory区别?
BeanFactory只有一个单一职责,就是生产bean.需要手动注册。
ApplicationContext不生产bean而是通知BeanFactory来生产,封装的功能相对全面,自动注册。
比如扫描配置信息(可以扫描不同的配置信息ClasspathXMLApplicationContext,AnnotationConfigApplicationContext(读取配置类的配置信息)),初始化事件监听,加载环境变量
3,FactoryBean的作用?
- 是一个特殊的bean,是一个接口,必须实现getObject方法,必须依赖于其他的bean,
- 一般用于实现复杂对象,如:代理对象。
- 具有延迟加载的效果。
- 通过& 可以获取原实例 annotationConfigApplicationContext.getBean(“&beanName”);先创建容器,再getbean
创建一个实现了 FactoryBean<User> 接口的类,该类将负责创建 User 对象
public class UserFactoryBean implements FactoryBean<User> {
private String userName;
private int userAge;// Setters to inject properties into the factory
public void setUserName(String userName) {
this.userName = userName;
}public void setUserAge(int userAge) {
this.userAge = userAge;
}@Override
public User getObject() throws Exception {
return new User(userName, userAge);
}@Override
public Class<?> getObjectType() {
return User.class;
}@Override
public boolean isSingleton() {
return true; // Indicates if the created object should be treated as singleton
}
}