SpringBoot
Spring Boot 中文文档 (springdoc.cn)
Bean 对象管理
IOC容器
背景 : 代码书写现状(耦合度偏高),每次更换一个实现类,就可能要重新编译整个工程。
/*业务层实现*/
public class BookServiceImpl implements BookService {
private BookDao book = new BookDaoImpl(); // 创建对象写死在代码中
public void save() {
bookDao.save();
}
}
/*数据层实现*/
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
解决方案 :使用对象时,在程序中不要主动的使用new产生对象,转换为由外部提供对象。
IoC(Inversion of Conteol)
控制反转:对象的创建控制权有程序转移到外部,实现解耦。
Spring
技术提供了一个容器对IoC
思想进行实现。
DI(Dependency Injection)
依赖注入:在容器中建立bean与bean之间的依赖关系的过程。
Bean扫描
@ComponentScan
注解是Spring框架中的一个注解,用于指定Spring在扫描组件时的基本包路径。当Spring Boot应用程序启动时,会自动扫描指定的包路径下的组件,例如标记了@Component、@Service、@Controller
等注解的类,将其实例化并纳入Spring容器管理。
@ComponentScan
注解通常用于Spring Boot
的主配置类(通常是一个带有@SpringBootApplication
注解的类)上,用于指定Spring应该扫描的组件所在的包路径。在@ComponentScan
注解中,可以通过basePackages属性指定要扫描的包路径,也可以使用value属性来指定。
示例:
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.app.components"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Bean注册
如果要注册的bean对象来自于第三方(不是自定义的),是无法用 @Component 及衍生注解声明bean的
@Bean
:如果要注册第三方bean,建议在配置类中集中注册
@Import
:导入配置类,导入ImportSelector
接口实现类。