简单学习SpringIOC
-
IOC :一个存储对象的容器,控制反转 控制:控制对象创建权 反转:由开发者创建 对象:指的对象的创建由程序员在类中主动创建反转到由Spring容器来创建
官网:spring.io
2.容器之间继承关系:
最底层:BeanFactory:Spring容器的顶层接口,以前用,默认是懒加载,其中getBean是这个接口的方法
第二层:ApplicationContext:是父接口,一般用得比较多,默认是立即加载
最外层:AnnotationConfigApplicationContext:是子接口,注解版IOC容器
ClassPathXmlApplicationContext:是子接口,XML版IOC容器
3.获取容器中的类对象的方法
首先要解析配置类获取到IOC对象
//1.解析配置类,获取Spring容器
ApplicationContext ioc = new AnnotationConfigApplicationContext(SpringConfig.class);
//2.从容器中获取对象(bean)
DataSource datasource = (DataSource) ioc.getBean("dataSource");
(1)getBean("beanId") :使用bean的id从容器中查找唯一对象,获取时需要强转,
bean的id也被叫beanName,默认为类名首字母小写,也可以通过value属性去指定bean的id
(2) getBean(Bean.class)使用bean的Class类型从容器中查找对象
前提:需要保证容器中这个类型的对象只有一个,否则会报错
(3)getBean("id",Bean.class) 使用bean的id和class类型从容器中查找对象
4.常用注解:
(1)@Configuration 表示该类是一个Spring配置类
@ComponentScan(basePackages = " 包名") :表示扫描该包下的组件(由@compnent标记的类) 一般用在配置类上
(2) @Component:标记在普通类上
以下三个是衍生注解,功能跟@Component一样
@Controller:标记在表示层的类上
@Service:标记在业务层的类上
@Repository:标记在持久层的类上
(3)@Scope:标记在类上
取值:
- singleton 单例,是默认值,对于一个类,只会创建一个对象,每次从容器中获取,拿到的都是这个对象。Spring创建的bean对象,默认是单例的, 其中对象随着容器的创建而创建,随着容器销毁而销毁
- prototype 原型,也叫多例,对于一个类,每次从容器中获取,都会创建一次,得到一个新的对象,其中对象是在每次获取时创建,对象的销毁由GC控制
- request 在web环境中,每个请求范围内会创建新的对象
- session 在web环境中,每个会话范围内会创建新的对象
- application 在web环境中,每个应用范围内会创建新的对象(4)@Autowired:自动注入, 按类型从容器中查找能够匹配的bean,如果找到一个,直接注入。如果找不到,直接报错。如果找到多个,则会把属性名当做bean名称再去匹配,找到注入,找不到报错
@Qualifier: 手动指定bean的名称 不能自动注入,要配合Autowired使用(5)@Resource: jdk8以上不能使用,非Spring注解,根据bean名称进行注入,必须指定name属性
@Primary: 作用在类上,当有多个匹配的bean时,指定默认的注入的bean ,一般不常用
(6)@Bean:标记在方法上,用于将方法的返回值交给Spring容器管理,默认bean的名称为方法名
@PropertySource: 加载外部properties文件
@Value:给属性赋值
@Import:导入其他配置类
实例:配置数据库四要素:
@Configuration
@PropertySource("classpath:jdbc.properties")//读取类路径下的jdbc.propertiess
public class DataSourseConfig {
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;@Bean("ds") //将数据源注入到Spring容器中
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driver);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
将该配置类导入到Spring配置类中:
5.Spring 整合Junit
步骤:1、测试类上标记注解@Runwith更换运行器
2、测试类上标记注解@ContextConfiguration指定配置类
3、测试类直接注入要测试的bean
4、运行测试方法
@RunWith(SpringRunner.class) //更换运行器
@ContextConfiguration(classes = SpringConfig.class) //指定配置类
public class DeptServiceImplTest {
@Autowired
private DeptService deptService;
@Test
public void findAllTest(){
List<Dept> depts = deptService.findAll();
System.out.println(depts);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了