SLXYGuo

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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对象是单例还是多例

     ④Bean的生命周期

      首先要在类中写无参构造,其次要在Bean标签中配置。

 

      要检验destory方法是否执行,要关闭IOC容器。  在Class...类下的。close()方法。.close()方法比较暴力,还有一种关闭钩子。 

      区别:.close()如果放在getBean前会报错,直接关闭容器。

     第二种使用接口:

 

 

 

12.DI部分{

     ①依赖注入。        向一个类中传递数据有两种方式:普通方法(set方法)或构造方法

     依赖注入分为四种:Ⅰ使用set方法注入简单类型/引用类型。(setter注入)

                                     Ⅱ使用构造方法注入简单类型/引用类型

   set方法:  ref是引用,给值只能value

 

 

 

   构造器注入: 第一个name是形参名,ref是引用类型

 

 

 

 这种写法解决了与形参名耦合度他太高的问题,但是涉及多个无法识别。

 

 

  解决上述的多个参数的问题、

  ②依赖自动装备:IOC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配。分为四类:类型、名称、构造方法、不启用自动装配

    ③集合注入的标准书写格式:

13.数据源对象管理(用Bean管理第三方对象)

    管理第三方提供的资源本质即告知哪个对象需要被管理,由其提供对应的属性。

例: 

14.spring加载properties文件中的信息:

     ①开启一个新的内部空间(开启context命名空间

 

 

 

 

  ②使用context空间加载properties文

  ③使用属性占位数${}读取properties文件中的属性 

15.容器操作:

     一种是之前的加载类路径下的配置文件,ClassPath .....  ;另一种为通过文件系统加载配置文件,即绝对路径的文件系统下查找所需

获取Bean的第二种,之前getBean都需要强转。此写法无需强转,但不唯一会有错。

 

 

总结:

  

容器篇总结:

bean相关:

 

依赖注入:

 

Bean注解篇:

  纯注解开始模式中用config包下的Java类Springconfig代替Spring核心配置文件。配置文件的结构为@Configuration,配置文件中的扫描换为@ComponentScan

bean的生命周期:

bean的依赖注入:

 

 

 

 

 

 

 

 

 

 

 

 AOP篇:

   定义:面向切面编程,一种编程范式,指导开发者如何组织程序结构。

   作用:在不惊动原始设计的基础上为其进行功能增强。源自于Spring的无侵入式理念。

   描述:再AOP中,想让每一个方法都具有的内容(共性功能)称为通知,通知可以按照开发需求制造很多个即通知类。而程序中的原始方法称为连接点,要追加功能的方法称为切入点。能够描述通知内容与切入点关系的称为切面(绑定关系)。注:切入点范围小,连接点范围大。 

   步骤:①导入坐标

 

              ②原来的接口、实现类、执行程序不做任何改动。

              ③spring核心配置文件中要加注解@EnableAspectAutoProxy(告知程序要使用注解进行开发)

              ④写一个通知类,@conpoent(加载自身)@Aspect(告知Spring注解下的方法是用来做AOP的) @Pointcut(定义切入点)@Before(绑定切入点和通知)

 

  AOP工作流程:

     ⅠSpring容器启动;

     Ⅱ读取所有配置中的切入点(只有绑定的会被读取);

     Ⅲ初始化Bean,判定Bean对应的类中的方法是否匹配到任意切入点。如果匹配失败,就创建对象;匹配成功,创建原始(目标)对象的代理对象。

     Ⅳ获取Bean执行方法

AOP核心概念:

   目标对象:原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的。

    代理:目标对象无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现。   注:Spring AOP的本质即代理模式

AOP切入点表达式

     切入点:要进行增强的方法;  切入点表达式:要进行增强的方法的描述方式

 

 

 

总结:

 

 AOP通知类型:

   AOP通知描述了抽取的共性功能,根据共性功能抽取位置的不同,最终运行代码时加入的位置不同。分为:前置、后置、环绕、返回后通知、抛出异常后通知

 

 

 

 

 

 

 

               

 

 

 

 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

posted on 2023-02-27 16:37  HelloWorldGG  阅读(57)  评论(0)    收藏  举报