容器
创建容器
一般都用1
获取Bean
用一或者二
容器类层次结构图
BeanFactory创建完毕后,所有的bean均为延迟加载
ApplicationContext加载的bean都是立即加载的
核心容器总结
容器相关
bean相关
依赖注入相关
依赖注入比较少,setter注入需要掌握
注解开发
base-package 写扫描的路径 会扫描路径下所有的bean以及路径下所有包中的bean
如果我们没有设置Component的名称,那么我们可以通过类型来找到类:
BookService bookService = ctx.getBean(BookService.class);
只是名字不一样,便于区分,功能完全一样
纯注解开发
我们取消掉原来的配置文件,新建一个 SpringConfig类
配置文件的结构会转换为@Configuration
包扫描的部分则转换为@ComponentScan("com.itheima")
初始化的时候也换了一个实现类
@PostConstruct 在构造完成后 等同于之前的init
@PreDestroy 在销毁前 等同于之前的destroy
@Scope 可以定义实例出的对象是同一个 或者不同
注解依赖注入
使用@Qualifier注解开启指定名称装配bean
但是不能省略@Autowired
简单类型注入
加载properties文件![](https://img-blog.csdnimg.cn/efd2205a429b468688afda0a8443fb89.png)
加载了properties文件,可以通过 ${name} 来调用
如 @Value(${name})
注解开发管理第三方bean
第三方bean管理 例如 Junit
使用独立配置类管理第三方bean
新建类:
@Configuration public class JdbcConfig { @Bean public DataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/db1"); ds.setUsername("root"); ds.setPassword("123"); return ds; } }
然后在我们原先的配置类中用@Import导入刚写好的配置类
@Configuration @ComponentScan("com.itheima") @Import(JdbcConfig.class) public class SpringConfig { }
使用@Import注解手动加入配置类到核心配置,此注解只能添加一次,多个数据请用数组格式
在使用第三方bean的时候我们可以使用@Value注入成员变量 然后给对应的内容赋值
@Configuration public class JdbcConfig { @Value("com.mysql.jdbc.Driver") private String Driver; @Value("jdbc:mysql://localhost:3306/db1") private String url; @Value("root") private String username; @Value("123") private String password; @Bean public DataSource dataSource() { DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(Driver); ds.setUrl(url); ds.setUsername(username); ds.setPassword(password); return ds; } }
引用类型用方法形参 ,基本类型用成员变量
注解开发总结
XML配置比对注解配置
Spring 整合 mybatis
导入依赖
依赖我们先导入mybatis,mysql的但是我们还需要另外两个依赖
一个是Spring 操作数据库的包 一个是mybatis 跟 Spring整合的包
<!-- Spring 操作数据库的包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>6.0.0</version> </dependency> <!--mybatis 与 Spring整合的包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency>
单独创建MybatisConfig配置类 然后导入到核心配置文件
public class MybatisConfig { @Bean public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) { SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); //对应初始化类型别名部分 ssfb.setTypeAliasesPackage("com.itherma.domain"); //对应数据库连接那部分 ssfb.setDataSource(dataSource); return ssfb; } @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer msc = new MapperScannerConfigurer(); //对应设置包扫描地址那部分 msc.setBasePackage("com.itheima.dao"); return msc; } }
Spring整合Junit
导入依赖
<!--单元测试依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> </dependency> <!-- spring整合Junit包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>6.0.0</version> </dependency>