Spring框架笔记

一:Spring概念介绍

下载Spring框架 spring-framework-4.0.4.RELEASE-dist,4.0.4版官方地址为 http://repo.springsource.org/libs-release-local/org/springframework/spring/4.0.4.RELEASE/ (如果觉得太慢也可以去国内网站下载)

此外,还需要下载一个必要组件commons-logging-1.1.3-bin ,可以在http://commons.apache.org/官网下载也可以在国内网站下载。

1:Spring的核心

        (1)IOC(控制反转):

                         比如以前:有一个类,在类里面有一个方法(不是static方法),调用类里面的方法就要创建类的对象,使用对象调用方法,创建类对象的过程,对象需要new出来;

                         Spring:对象的创建不是通过new方式实现,而是交给Spring配置创建类的对象


        (2)AOP(面向切面):面向切面编程,扩展功能不是修改源代码实现


2:Spring的优点

        (1)高内聚低耦合,Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护

        (2)声明式事务的支持:只需在配置文件声明就可使用事务,无需手动编写代码

3:Spring是一站式框架

        (1)Spring在JavaEE三层架构中,每一层都提供不同的解决技术

                - web层:SpringMVC

                - service层:Spring的ioc

                - dao层,Spring 的jdbcTemplate


二:Spring的ioc底层原理

1:把对象的创建交给Spring进行管理

2:ioc操作部分

        (1)ioc的配置文件方式

        (2)ioc的注解方式

        (3)ioc底层原理

                 1:底层实用技术:

                     (1)xml配置文件

                     (2)dom4j解决xml

                     (3)工厂设计模式

                     (4)反射

                  2:原理图

                        发展过程(图一)

                        ioc最终原理图(图二)

Spring框架笔记_第1张图片
Spring框架笔记_第2张图片
原理图



三:ioc入门案例

        第一步:导入jar包

                    (1)导入最基本的包 

Spring框架笔记_第3张图片
基础jar目录
Spring框架笔记_第4张图片

                    (2)导入输入日志的jar包和一个必要的组件


jar目录



        第二步:创建类,在类里面创建方法

        第三步:创建Spring配置文件,配置创建类

                        (1)Spring核心配置文件名称和位置不是固定的

                        (2)引入schema约束

                               下载的框架里面找xsd-config.html 文件打开 路径:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html

                                在页面最后

                        (3)配置对象创建

Spring框架笔记_第5张图片

        第四步:写代码测试对象创建

Spring框架笔记_第6张图片
测试代码



四:Spring的bean管理(配置文件xml方式)

        在Spring里面通过配置文件创建对象

        (1)bean实例化的三种方式

                1:使用类的无参数构造创建(重点)


xml配置

                        类里面没有无参数构造,会抛异常

                2:静态工厂创建对象(很少用,麻烦)

                                        这里的class写的是工厂(Bean2Factory)的全路径;factory-mothod 写工厂里面的方法

xml配置
Spring框架笔记_第7张图片
静态工厂类代码
Spring框架笔记_第8张图片
测试代码

                    3:实例工厂创建对象(很少用,麻烦)

xml配置
Spring框架笔记_第9张图片
工厂代码
Spring框架笔记_第10张图片
测试代码

        (2)bean标签的常用属性

                1:id属性:起名称,id属性名称任意命名

                           - id属性值,不能包含特殊符号

                           - 根据id值得到配置对象

                2:class:创建对象所在了的全路径

                3:name:跟id的作用是一样的,但是name属性可以包含特殊符号

                4:scope(范围)属性 ,写在bean标签里面 ,例如:

xml配置图

                         - singleton    :默认值,单例的(对象只会创建一次)

                         - prototype    :多例的(每次创建对象都是一个新的对象)

                         -  request      :创建对象放到request域里面    

                         -  session      : 创建对象放到session域里面   

                         -  globalSession(全局Session):创建对象放到globalSession域里面   

        (3)属性注入方式介绍

                属性注入:创建对象的时候,向对象属性里面设置值,就叫做属性注入

                1:属性注入的三种方式

                        (1) - 使用属性的set方法

                        (2) - 用有参构造注入

                        (3) - 使用接口方式注入(很少用)

                         在Spring中,只支持set方法注入有参构造注入


Spring框架笔记_第11张图片
三种属性注入方式


        (4)Spring注入属性(有参构造和set方法) 

                1:有参构造


Spring框架笔记_第12张图片
有参构造方法

                          xml配置,name填类的属性,value填设置的值

xml配置图



Spring框架笔记_第13张图片
测试代码

                   2:set方法

Spring框架笔记_第14张图片
类代码
Spring框架笔记_第15张图片
xml配置
Spring框架笔记_第16张图片
测试代码

        (5)Spring注入对象类型属性(重点)

                1:创建service类和dao类

                        -    在service得到dao对象

                 2:具体实现过程

                        -    在service里面把dao作为类型属性

                        -    生成dao类型属性的set方法 

Spring框架笔记_第17张图片
具体实现代码

                3:在配置文件中完成注入

                    ref属性填写注入的对象

Spring框架笔记_第18张图片
xml配置图

                  4:测试代码

Spring框架笔记_第19张图片
测试代码


        (6)p名称空间注入(很少用)

                1:引 入p名称空间


Spring框架笔记_第20张图片
xml引入图


Spring框架笔记_第21张图片
类代码图 

                    p:类里面的属性名="填入值"   ;例如:p:pname="lucy"

xml配置图


Spring框架笔记_第22张图片
测试代码


        (7)Spring注入复杂数据 (很少用)

                    - 写类代码


Spring框架笔记_第23张图片
类代码 
Spring框架笔记_第24张图片
String[] arrs配置图1


Spring框架笔记_第25张图片
List  list配置图


Spring框架笔记_第26张图片
map和properties配置图


Spring框架笔记_第27张图片
 测试代码

    (8)IOC和DI的区别

        1:IOC:控制反转,把对象的创建交给Spring进行配置

        2:DI:依赖注入,向类里面的属性中设置值

        3:关系:DI(依赖注入)不能单独存在,需要在IOC的基础上完成操作


     (9)Spring整合web项目原理

                (1)加载Spring核心配置文件

                            ①:new对象,功能可以实现,效率很低

                   (2)实现思想:把加载配置文件和创建对象的过程,在服务器启动时完成

                   (3)实现原理:

                            ①:ServletContext对象

                            ②:监听器

                            ③:具体使用

                                    - 在服务器启动时,为每个项目创建一个ServletContext对象

                                    - 在ServletContext对象创建时,使用监听器可以具体到ServletContext对象在什么时候创建

                                    - 使用监听器监听到ServletContext对象创建时,加载Spring配置文件,把配置文件配置对象创建

                                    - 把创建的出来的对象放到ServletContext域对象里面(serAttribute方法)

                                    - 获取对象时候,到ServletContext域得到(getAttribute方法)

        (10)Spring整合web项目演示

                (1)导入Spring整合web项目jar包

jar包

                (2)在web.xml配置文件里面配置监听器

Spring框架笔记_第28张图片
监听器配置

                (3)指定加载Spring配置文件位置(如果不指定配置文件,就会报错)

Spring框架笔记_第29张图片
报错图

                          标签的值是固定的

                          填配置文件的路径,如果在src里面 直接写:classpath:文件名称.xml    ;如果在包里面,就需要些详细路径:classpath:com.kk.文件名称.xml

Spring框架笔记_第30张图片
指定配置文件位置

五:Spring的bean管理(注解方式)

注解:代码里面特殊的标记,使用注解可以完成功能

注解写法:@注解名称(属性名称-属性值)

注解使用在类上面,方法上面,属性上面

1:Spring注解开发准备

        (1)导入基本的jar包


Spring框架笔记_第31张图片
Spring基本jar包

        (2)导入aop的jar包

aop的jar包

        (3):创建Spring配置文件,引入约束

                    (1)做ioc只需引入约束beans,但是做Spring的ioc注解开发,需要引入新的约束

                        约束路径:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html

Spring框架笔记_第32张图片
约束图片

       (4):配置文件中开启注解扫描

Spring框架笔记_第33张图片
xml


2:注解创建对象


Spring框架笔记_第34张图片
创建对象图


Spring框架笔记_第35张图片
 测试代码

3:四种注解方式 

        Spring 中提供@Component的三个衍生注释:

        @Controller     web层

        @Service        业务层

        @Repository   持久层

        四种方式功能是一样的,Spring是为了方便以后扩展功能

        (1)    @Controller

        (2)    @Service

                其他都是一样的方式,其中 value= 可以省略直接写冒号里面的

Spring框架笔记_第36张图片
@Service注解图

        (3)    @Repository

        (4)    @Component



4:创建对象单实例还是多实例


Spring框架笔记_第37张图片
实例图

5:注解注入属性

        *    创建service类 和 dao类

             对象注入的两种注解方式

                        第一种是    @Autowired    在下面创建serivce里面有例子

                        第二种是    @Resource(name="xxxx")     name属性值是写创建dao对象的注释的value值,也就是需要制定注入哪一个对象

注入对象第二种示例

        *    创建service


Spring框架笔记_第38张图片
Service类创建

        *    创建dao类


Spring框架笔记_第39张图片
Dao类创建

        *    测试代码

Spring框架笔记_第40张图片
测试代码
Spring框架笔记_第41张图片
效果

6:注释和配置文件混合使用

        - 创建service类和dao类并注入属性,注入方式使用的是注解的方式

Spring框架笔记_第42张图片
service类创建
Spring框架笔记_第43张图片
dao类创建
Spring框架笔记_第44张图片
dao类创建

        - 将对象的创建交给配置文件

Spring框架笔记_第45张图片
xml配置文件创建对象

           - 测试

Spring框架笔记_第46张图片
测试代码
打印的效果


7:AOP原理

        (1) AOP概述

                AOP:面向切面(方面)编程,扩展功能不修改源代码实现

                 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码

        (2)AOP底层原理

Spring框架笔记_第47张图片
原始纵向机制
Spring框架笔记_第48张图片
aop原理

        (3)AOP操作相关术语

                1:Joinpoint(连接点):类里面的那些方法可以被增强,这些方法称为连接点

                2:Pointcut(切入点)重点:在类里面可以有很多的方法被增强,比如实际操作中,只是增强了类里面add方法和update方法,实际增强的方法称为 切入点

                3:Advice(通知/增强):增强的逻辑,称为增强,比如扩展日志功能,这个日志功能称为增强,

                            前置通知:在方法之前执行

                            后置通知:在方法之后执行

                            异常通知:方法出现异常

                            最终通知:在后置之后执行

                            环绕通知:在方法之前和之后执行

                4:切面:把增强应用到具体方法上面,过程称为切面

                            把增强用到切入点的过程

                没那么重要的术语

                5:Introduction(引介):动态添加功能或者属性

                6:Target(目标对象):代理的目标对象(要增强的类)

                7:Weaving(织入):是把增强应用到目标的过程

                                                把advice 应用到target的过程

                8:Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类


8:使用表达式配置切入点

        (1):切入点:实际增强的方法

        (2):常用的表达式

                   execution(<访问修饰符public,private,...>?<返回类型><方法名>(<参数>)<异常>)

                   1:例如:execution(* net.kuniu.controller.UserDao.text(传参))

                        表示的是:增强net.kuniu.controller.UserDao 里面的test() 方法

                    2:execution(* net.kuniu.controller.UserDao.*(传参))

                          表示的是:增强net.kuniu.controller.UserDao 里面的所有方法

                    3:execution(* *.*(传参))

                          表示的是:增强所有类的所有方法;

                    4:execution(* abc*(传参))

                          表示的是:匹配所有abc开头的方法进行增强;


9:Spring的AOP操作

        1:在Spring里面进行AOP操作,使用aspectj实现对AOP的操作

           (1):Aspectj是一个面向切面的框架

           (2):Spring2.0以后新增了对AspectJ的支持

        2:使用AspectJ实现AOP有两种方式

            (1)基于aspectj的xml配置

            (2)基于aspectj的注解方式

        3:AOP操作准备

            (1)除了导入最基本的jar包,还需要导入AOP相关的jar包


Spring框架笔记_第49张图片
jar包目录

            (2)创建一个Spring的核心配置文件,导入约束

                      约束路径:spring-framework-4.0.4.RELEASE\docs\spring-framework-reference\html\xsd-config.html

                       打开网页,找到 AOP相关的约束

Spring框架笔记_第50张图片
AOP约束图片


        4:AOP操作

    

Spring框架笔记_第51张图片
方法代码 


xml配置图


Spring框架笔记_第52张图片
xml配置图



10:Log4j介绍

        1:通过log4j可以看到程序运行的过程中更详细的信息

                (1)经常使用Log4j查看日志 

        2:Log4j的使用

                (1)导入log4j的jar包

                (2)复制Log4j的配置文件,到src下面

配置文件名称

         3:可以设置日志级别 


级别设置位置

                    (1)info:看到基本信息

                    (2)debug:看到更详细的信息



11:Spring整合web项目演示

你可能感兴趣的:(Spring框架笔记)