声明:
在学习Spring的某视频的时候,突然发现基础非常不牢固,特此选了一个视频教程,计划用一整周的时间,把spring基础学完学好
1.概述
关于整个spring的知识是一定要掌握的:spring跟spring并不一样,spring是一个大的框架概念,spring为核心的框架可以整合很多框架
我们按照从外到里的顺序来讲一下spring大概念,大框架
浏览器==>控制层,这里的控制层就是指的,接受request,然后response并且控制视图的那一层,这一层所用到的主流技术就是:
strust2的action和SpringMVC的handler,学习完spring大概念要以后,下一步肯定就是要学习springMVC,先把spring学好
2.Spring特性
没有看spring的底层代码,但是Spring有最基本的2大特性:IOC + AOP
IOC:
之前在写Java SE程序或者写android1的时候,类与类之间,经常会遇到需要通过构造函数注入,类与类之间紧耦合,而IOC通过容器的方式,用接口的实现类,实现从IOC容器里面拿beans,这样就实现了各个bean的松耦合
AOP:
我们的程序一直都是从上到下,从入口函数一次往下运行,无论是面向对象的程序,还是面向过程的程序,而AOP所谓的面向切面,意思就是,如果把从上到下的这种程序运行方式称之为纵向,那么面向切面变成,就是通过把从上到下的运行的某一个或某一类程序,进行横向的处理,比如前置处理,后置处理,环绕处理,把纵向运行的程序进行横向封装,这种编程技术,就是面向切面变成AOP
3.准备
非maven的方式,jar包全部要导进来,然后添加路径依赖
需要下载一下springIDE插件:spring-tool-suite,关掉联网更新
4.用xml来配置bean
创建了一个名为spring bean configuration file的一个名为applicationContext.xml的配置文件
步骤:
1.:ClassPathXmlApplicationContext-->从类路径加载,通过这个接口拿到一个实现类,然后通过这个实现类去对xml里面已经配置好了的bean进行操作创建spring容器:ApplicationContext ctx = new ClassPathXmlApplicationContext("路径");还有一种实现接口的方式,不是使用类路径,而是系统文件路径:FileSystemXmlApplicationContext-->从文件系统的xml中加载配置文件
2.在xml创建各种各样的bean,记住,穿件的bean的时候,对应的bean的java代码里面一定要有无参构造函数
3.从IOC容器里面拿bean,通过getClass或者getName
5.用xml配置bean的细节
1.属性注入(property)-->使用set方法注入属性值(最常用)
对应的java代码里面一定要有写set方法
2.构造器注入(constructor-arg)--> 使用 <constructor-arg>,后面要加index来表明,注入的是哪个全局变量,还可以用type类型来指定注入的是哪个全局变量,index和type可以混合使用
3.在配置bean的时候,如果没有传初始化参数,对象默认的就是null,int就是0
4.在一个bean里面用另一bean,有点类似h5,使用ref来引用其他bean
5.如果需要再bean里面配置一个集合,使用到的子node就是list标签.
6.内部bean,一个内部bean是不能被其他bean引用的,所以这个内部bean写不写id都无所谓
7.级联属性,在注入bean的时候,可以这样写,name="ClassName.property",但是有一个前提,级联的这个类要先被初始化
8.Map,之前的list标签,对应的是数组array,现在的Map对应的子node是entry里面写key + value
9.properties,之前数据库配置参数里面见过,username,pwd,jdbcurl等,就是一个数据类型,这里用到的子node是props的prop
10.可以供外部调用的bean,之前写的bean全部只能给自己调用,现在需要用到打开新的命名空间,找到util,然后有一个叫做<util:list>的node,就可以在里面配置可以供给外部调用的bean了,
11.如果非要用xml配置bean,不要使用property,使用在标签里面使用p属性
12.autowire自动装配,在装配bean的时候,可以使用autowire自动装备,但是一般情况下不要使用,容易出错,这里有byName,按照bean所在java代码里面的全局变量名进行装配,而byType是按照类的类型进行装配,如果有2个以上相同类的bean,就会报错