这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
前言
首先提一个概念:Java Bean
Java Bean是使用Java语言编写的可重用的组件。说白了其实就是我们编写的类,它是Java面向对象的基础。
平时编写Java程序时,我们需要手动管理这些Bean,决定什么时候new一个Bean,并且要把它分配给谁。
这么一看倒是稀疏平常的一件事,但是当程序规模变得庞大起来的时候,这些Java Bean就会到处都是,而且如果后续要更换某些Bean(例如项目的升级迭代),依然需要去用最原始的方法去new一个对象,然后再分配给某个特定的地方。可想而知,这是一个很麻烦的事情,spring就解决了这个痛点。
spring概括
spring是一个开放源代码的设计层面框架,它有两大特点:控制反转(IOC)和面向切面(AOP)。
什么是控制反转(IOC)
原先,我们需要手动创建Bean并且分配,有了spring之后,我们就可以把Bean的创建和分配都交给spring容器去管理了,这就是“控制反转”。
基本使用
- 导入使用spring所需要的依赖
我使用的构建工具是gradle,在build.gradle中导入如下配置:
dependencies {
// spring
implementation 'org.springframework:spring-context:6.0.3'
}
如果使用的是maven,步骤也是一样的,只不过内容不同~
- 创建一个空的类,并带上注解
@Configuration
@ComponentScan("sys")
public class Config {
}
使用spring之前需要进行配置,也就是写特定的xml文件,而使用@Configuration可以代替这一步;@ComponentScan("sys")的作用是进行扫描,扫描sys包下的所有类,找到需要spring进行管理的Bean。
- 让spring托管Bean
spring就是管理各种各样的Bean的,我们还需要让spring知道哪些Bean需要让它去管理。
@Bean
public HikariDataSource dataSource() {
HikariDataSource ds = new HikariDataSource(config());
return ds;
}
@Bean注解用在方法上,这会产生一个与方法名同名的Bean。
@Component
public class Database {
// ......
}
@Component注解则用在类上。
- 加载spring配置
public class Demo {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
}
}
在程序执行的入口,我们需要指定这一行代码,它的作用是加载spring配置,这个配置写在了类Config中,也就是我们刚才写@Configuration的那一个空类。
- 使用
getBean()方法观察结果
具体使用方法不作说明。
public class Demo {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
HikariDataSource bean = ctx.getBean("dataSource", HikariDataSource.class);
System.out.println(bean);
}
}
输出结果如下:
配置成功。