根据老师上课讲解,自己对学习的整理
Spring对象的生命周期
生命周期说明
1.对象创建 (不需要标识,自己创建的时候生成)
2.初始化
3.对象调用 (不需要标识,用户手动调用)
4.对象销毁
如果需要执行销毁方法,则需要先关闭容器对象,接口并没有提供关闭方法,需要将接口类型换成实现类类型,销毁行为是敏感行为
生命周期方法都是自动调用
@PostConstruct 标识初始化方法
@PreDestroy 标识销毁方法
Spring管理对象-@Componet
@Componet/@Bean区别
1.
@Componet Spring容器通过反射机制自动创建对象
@Bean 是用户手动创建对象
2.
@Componet 标识类
@Bean 标识配置类中的方法
3.
@Component 对象的id是类名首字母小写
@Bean 对象的id是方法名
Spring-DI(Dependency Injection)
Spring中依赖注入
依赖注入就是将Spring容器中管理对象(数据),赋值给对象的属性。
核心机制:如果需要使用依赖注入,则对象的属性必须由setxx()方法
为对象赋值
【set方法注入】
在<bean>标签里添加property标签,name为属性名,value为属性值
【构造方法注入】
在<bean>标签中添加constructor-arg标签,name为属性名
IOC/DI意义
Spring中IOC(控制反转)/DI(依赖注入)两种方式相互结合,实现了代码的松耦合
@AutoWired 自动注入
规则:
1.默认条件下使用set注入,按照类型匹配
2.set方式注入也可以按照name名称进行匹配
3.只要使用注解,默认自动生成set方法
实现原理;
1.类型匹配:如果是接口,则自动匹配其实现类对象
2.name名称匹配:根据spring中的key进行注入
多实现解决:
@Qualifier必须和@Autowired联用
并且需要指定value的名称,就是spring中的key
一般情况下,spring都是单实例
多实现类情况处理
Spring中的DI注入,一般情况下 采用按照类型的方式匹配,如果遇到多实现类的情况,则会报错
这时就可以在resources文件夹下编辑properties配置文件
#1.数据结构 key=value
#2.其中的数据默认都是String类型,数值可以切换为数值类型
#3,程序读取时,默认的字符集时ISO-8859-1 不支持中文
#如果需要支持中文需要使用utf-8
#赋值规则:类名小写.属性=数值
properties文件
#1.数据结构key=value
#2.其中的数据默认都是String类型,数值可以切换为数值类型
#3.程序读取时,默认字符集为ISO-8859-1,可以在配置中Editor->Code Style->File Encodings中修改成为UTF-8
#id=100 建议使用类名+属性
dept.id=100
在数据类添加注解
@PropertySource(value="classpath:/文件名",encoding="UTF-8")
当spring容器启动时,加载指定的配置文件,讲数据保存到容器中
在数值上添加
简单数据赋值:@Value("值")
减少耦合:@Value(“${文件中的数据Key}”),在properties文件中写值。