1.Spring作为轻量级框架的两大核心:IOC、AOP、事务处理(基于AOP)。
2.经过学习要会什么?
核心概念IOC、DI >>>>整合mybatis >>>>AOP概念及操作>>>>事务实用开发
3.架构图:
4.为什么提出了IOC概念?
为了解决代码耦合度偏高,想要做到使用对象时在程序中不主动使用New产生对象,转换为外部提供对象。由此引入了IOC(控制反转),原来是程序创建改为Web创建对象
5.IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为Bean。
6.Service类依赖Dao对象才能运行,而IOC容器中只给了Service对象,因此运行还会保存。又因为IOC容器中包含Service、Dao对象,由此IOC容器将Service和Dao绑定。即DI(依赖注入),在容器中如果两个Bean对象存在依赖关系,IOC容器会自主建立bean与bean之间的依赖关系,称为依赖注入。
7.充分解耦的目标是如何实现的?
先使用IOC容器管理Bean(IOC)>>>>再在IOC容器中将有依赖关系的Bean进行关系绑定(DI)。由此达到使用对象时不仅可以从IOC容器中直接获取,并且获取到的Bean已经绑定了所有的依赖关系。
8.使用IOC时要考虑什么?
①IOC要管什么? Service和Dao
②如何将被管理的对象告知IOC容器? 通过配置文件
③被管理的对象交给IOC容器,如何获取到IOC容器? Spring中有接口
④IOC容器得到后,如何从容器中获取Bean? 接口中的方法
⑤使用SPringl技术导入哪些坐标? pom.xml中导
9.初识IOC{
Spring坐标,由此可以在Resource目录下创建XML文件(Spring config) applicationContext.xml
配置Bean的标签 <bean/> 要管理的对象由class =""告知,例。要配实现类,非接口。起别名用id =" " ,写程序的时候用。
获取IOC容器时,由于ApplicationContext是一个接口,故不能new对象要new实现类Class....,且要加载配置文件。获取bean时通过IOC容器中.getBean方法时获取的是对象,注意转类型。}
10.初识DI{
业务层代码中不在使用new的方式创建dao对象,且提供相应的set方法。要将Dao放到Service中,即Service中有个属性叫Dao。第一个bookDao是Service中的属性,ref中的bookDao是xml文件中的。
11.关于Bean?
①别名:Bean是可以起多个别名的,这个异常只存在两个问题,实现类中getBean中的名称错误/xml文件中name =" "出错 不同别名可用逗号,分号;空格隔开,都会起作用。
②作用范围:Spring默认创建的Bean对象是单例的,即地址相同。要创建多例的,在<bean/>中scope=" "中配置。 singleton---单例,prototype----多例
为什么Bean创建的对象默认是单例的? 因为容器存储地址总归是有限的,要是默认多例那就再创建对象时用一个造一个,无穷无尽。不符合复用效果
哪些适合交给容器管理的Bean?表现层对象----service 业务层对象----service 数据层对象----Dao 其它工具类对象
不适合的? 封装实体的域对象。
③bean是怎么创建的?
三种实例化方式:
Ⅰ无参构造:公共的,私有的无参构造方法都能访问,蕴含反射知识。对于Spring的报错,(从最后一行开始看) 如果无参构造有参数就会报Instantiation of bean failed
Ⅱ静态工厂:工厂创建对象回顾,创个Service并实现Imp,再factory包下,在启动类
通过工厂创建Bean如果没有factory-method,此时创建的是Factory对象。我们需要的是Factory方法中创建的对象,故要告诉它是工厂中的哪个方法。
Ⅲ实例化工厂:(非静态)实例化工厂第一步是要先创建个对象出来,
为了简化这种写法,这是一种标准写法,FactoryBean是一个接口,里面的泛型需要创建哪个对象就填哪个。 getobject替代原来静态工厂中的getUserDao方法。getObjectType即对象是什么类型的。
在这个方法中修改创建的Bean对象是单例还是多例
标签:容器,Service,对象,Spring,笔记,学习,Bean,创建,IOC From: https://www.cnblogs.com/SLXYGuo/p/17160286.html