创建容器的方式:
// 1.加载类路径下的配置文件(相对路径)
_ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);
// 2.从文件系统下加载配置文件(绝对路径)
_FileSystemXmlApplicationContext conte = new FileSystemXmlApplicationContext(“D:\applicationContext.xml”);
从容器中获取bean对象的三种方式:
注解开发定义bean
- 在所有需要放到容器中的类,在类上使用@Component注解
2. 组件扫描:去指定包中和子包中找带有@Component的类并创建对象放到容器中base-package:基包,指定要查找包和子包。
纯注解开发
Java类代替Spring核心配置文件
读取Spring核心配置文件初始化容器对象切换为读取Java配置类初始化容器对象:
bean作用范围
使用@Scope定义bean作用范围
有singleton(单例)和prototype(多例),默认是单例
bean生命周期
使用@PostConstruct、@PreDestroy定义bean生命周期
一般情况下不用。
依赖注入
@Autowired
使用@Autowired注解开启自动装配模式(默认按类型,如果有多个类型相同的按名称)。
自动装配只适用引用类型。
注意:自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法;
注意:自动装配建议使用无参构造方法创建对象(默认)。
@Autowired默认是按照类型装配,如果有多个,按照名字注入,如果名字对不上,指定名称@Qualifier注入。
@Autowired(required = false)——找不到该类型就算了。
@Qualifier
按名字匹配的方式注入对象;
不能单独使用,必须与@Autowired一起作用。
@Value—简单类型
加载properties文件—@PropertySource
第三方bean管理
@Import:导入其它的配置类
@PropertySource:读取属性配置文件
@Bean:
1.把方法的返回值放到容器中
2.可以指定名字,如果没有指定名字,方法名就是id
3.如果方法有参数,通过类型匹配的方式从容器中去找
Spring整合MyBatis
Spring整合MyBatis有两个类:
SqlSessionFactoryBean
MapperScannerConfigurer
参考代码如下:
下面是从创建包到实现MyBatis整合的分析思路:
使用Spring整合JUnit
//Spring整合Junit 4单元测试
//@RunWith:junit提供的注解,可以指定其他运行器来运行单元测试
//SpringJUnit4ClassRunner:Spring提供的整合Junit单元测试的运行器,他的作用会创建IoC容器
//ContextConfiguration:指定配置类,让Spring根据这个配置类去创建IoC容器
@RunWith(SpringJUnit4ClassRunner.class)//读取类配置文件 @ExtendWith JUnit 5整合Spring
@ContextConfiguration(classes = SpringConfig.class)
public class SpringJunitTest {
@Autowired//自动注入业务对象
private AccountService accountService;
@Test
public void test01() {
//直接使用业务方法
List<Account> accountList = accountService.findAll();
accountList.forEach(System.out::println);
}
}
Spring中IOC与DI的常见注解
1.@ComponentScan:设置Spring配置类扫描路径,用于加载使用注解格式定义的bean
2.@Component:设置该类为Spring管理的bean
3.由@Component衍生出其他三个注解,@Controller(放在控制器),@Service(业务层),@Repository(持久层)
4.@Configuration:编写在类上,标识该类为一个配置类
5.@Bean:编写在方法上,会将方法的返回值制作成Spring容器中的一个bean对象
6.@Autowired:为引用类型属性设置值
7.@Qualifier:为引用类型属性指定注入的beanId
8.@Value:为基本数据类型或字符串类型属性设置值
9.@PropertySource:加载properties文件中的属性值
10.@Import:在当前类中引入其他的配置类
11.@Scope:该注解用来指定bean的作用范围
12.@PostConstructor:写在方法上,设置该方法为初始化方法
13.@preDestroy:写在方法上,设置该方法为销毁方法