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最终原理图(图二)

原理图



三:ioc入门案例

        第一步:导入jar包

                    (1)导入最基本的包 

基础jar目录

                    (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的bean管理(配置文件xml方式)

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

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

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


xml配置

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

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

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

xml配置
静态工厂类代码
测试代码

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

xml配置
工厂代码
测试代码

        (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方法注入有参构造注入


三种属性注入方式


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

                1:有参构造


有参构造方法

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

xml配置图



测试代码

                   2:set方法

类代码
xml配置
测试代码

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

                1:创建service类和dao类

                        -    在service得到dao对象

                 2:具体实现过程

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

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

具体实现代码

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

                    ref属性填写注入的对象

xml配置图

                  4:测试代码

测试代码


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

                1:引 入p名称空间


xml引入图


类代码图 

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

xml配置图


测试代码


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

                    - 写类代码


类代码 
String[] arrs配置图1


List<String>  list配置图


map和properties配置图


 测试代码

    (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配置文件里面配置监听器

监听器配置

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

报错图

                          <param-name>标签的值是固定的

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

指定配置文件位置

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

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

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

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

1:Spring注解开发准备

        (1)导入基本的jar包


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

约束图片

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

xml


2:注解创建对象


创建对象图


 测试代码

3:四种注解方式 

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

        @Controller     web层

        @Service        业务层

        @Repository   持久层

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

        (1)    @Controller

        (2)    @Service

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

@Service注解图

        (3)    @Repository

        (4)    @Component



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


实例图

5:注解注入属性

        *    创建service类 和 dao类

             对象注入的两种注解方式

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

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

注入对象第二种示例

        *    创建service


Service类创建

        *    创建dao类


Dao类创建

        *    测试代码

测试代码
效果

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

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

service类创建
dao类创建
dao类创建

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

xml配置文件创建对象

           - 测试

测试代码
打印的效果


7:AOP原理

        (1) AOP概述

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

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

        (2)AOP底层原理

原始纵向机制
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包


jar包目录

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

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

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

AOP约束图片


        4:AOP操作

    

方法代码 


xml配置图


xml配置图



10:Log4j介绍

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

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

        2:Log4j的使用

                (1)导入log4j的jar包

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

配置文件名称

         3:可以设置日志级别 


级别设置位置

                    (1)info:看到基本信息

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



11:Spring整合web项目演示

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容