1.Spring框架
1.1 IOC调用原理图
Ioc全称Inversion of Control,即“控制反转”,这是一种设计思想。对象创建的权利由Spring框架完成.由容器管理对象的生命周期,需要的时候进行依赖注入(DI)即可.
1.2 Spring创建对象的步骤
1.定义spring的配置文件的地址.
2.Spring容器启动时加载指定的配置文件.
3.当Spring扫描到bean标签时.加载属性id和class
4.根据class的路径反射.实例化对象.
5.Spring在内部维护了一个大型的Map<k,v>集合(容器),bean中的Id充当Map中的key. 实例化的对象充当Map中value.
形式: Map<Id,实例化对象> 到此为止 spring容器启动成功
6.从spring容器中通过Id或者class类型 获取对象.
7.根据对象调用业务方法根据 Spring-IOC 注解开发
1.3 关于注解开发说明
传统Spring框架采用xml配置文件的方式进行维护.但是随着springboot框架的崛起,注解开发渐渐的成为主流.所以将来以注解开发为准.
组成部分:
1. 实体类: Spring容器管理的类(对象)
编辑实体类
public class Cat {
}
2. 配置类: 相当于早期的xml配置文件
@ComponentScan("com.jt.demo3")
//根据指定的包路径扫描注解,扫描当前包及其子孙包
@Configuration //标识当前类是配置类 其实就是配置文件
public class SpringCatConfig {
/**
* 方法要求:
* 1.必须为公有的
* 2.必须添加返回值,返回值的对象,就是容器管理的对象
* 3.方法的名称就是bean的Id
* 4.方法必须使用@Bean注解标识
*/
@Bean
public Cat cat(){
return new Cat();
}
}
3. 测试代码: 利用注解的方式启动spring容器
public class SpringAnno {
public static void main(String[] args) {
//利用注解启动spring容器
ApplicationContext context =
new AnnotationConfigApplicationContext
(SpringCatConfig.class);
//根据类型获取对象
Cat cat = context.getBean(Cat.class);
cat.hello();
}
}
1.4 Spring-多例模式
1.4.1 概念说明
单例模式: 内存中的对象就一份.
多例模式: 内存中的对象有多份.
概念说明: Spring中的对象默认是单例的.
1.4.2 关于注解@Scope
@ComponentScan("com.jt.demo3")
//根据指定的包路径扫描注解,扫描当前包及其子孙包
@Configuration //标识当前类是配置类 其实就是配置文件
public class SpringCatConfig {
/**
* 注解管理对象--自定义对象:
* 1.方法必须为公有的
* 2.必须添加返回值,返回值的对象,就是容器管理的对象
* 3.方法的名称就是bean的Id
* 4.方法必须使用@Bean注解标识,spring才会执行该方法,标识该对象交给Spring容器管理,
*/
@Bean
@Scope("prototype") //表示多例对象
//@Scope("singleton") //表示单例对象
public Cat cat(){
return new Cat();
}
}
1.5 Spring中懒加载策略
关于懒加载说明
默认条件下,Spring容器启动,则会创建对象.(类比:饿汉式),如果开启了懒加载.则用户什么时候使用.则对象什么时候创建(类比:懒汉式).
注解: @Lazy
@Bean
@Scope("prototype") //表示多例对象
//@Lazy //开启懒加载
//@Scope("singleton") //表示单例对象
public Cat cat(){
return new Cat();
}
关于多例模式和懒加载说明:
@Lazy 只能控制单例模式, 多例模式都是懒加载.
1.6 @Value注解
1.6.1 编辑properties文件
# 1.数据结构: key=value
# 2.无需添加多余的引号
# 3.注意多余的空格
# 4.程序读取properties文件时,默认采用ISO-8859-1编码! 中文必定乱码
name=张三
1.6.2 编辑UserMapper
public interface UserMapper {
void addUser();
}
1.6.3 编辑UserMapperI实现类
@Repository
//spring根据指定的路径,加载properties配置文件 数据添加到spring容器中
@PropertySource (value="classpath:/addUser.properties",encoding = "UTF-8")
public class UserMapperImpl implements UserMapper{
/**
* @Value 注解的作用: 为属性赋值
* 需求: 从spring容器中动态获取数据
*/
@Value("${name}")
//@Value("张三") //直接写法,扩展性不好
private String name;
@Override
public void addUser() {
System.out.println("新增用户:" + name);
}
}
1.6.4 编辑测试类
public class SpringValue {
public static void main(String[] args) {
ApplicationContext context =
new AnnotationConfigApplicationContext(SpringConfig.class);
//获取的对象 实现类和接口都可以.
UserMapper userMapper = context.getBean(UserMapper.class);
userMapper.addUser();
}
}
1.6.5 关于IOC-DI总结
什么是IOC: 控制反转, 将对象交给Spring容器管理,由容器管理对象的生命周期.
什么是DI: