简单学习SpringIOC

  1. 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);
}
posted @   常山赵子龙i  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示