Spring笔记
- 格式:docx
- 大小:5.18 MB
- 文档页数:28
Spring概念1.Spring是开源的轻量级框架。
开源:免费且提供源代码;轻量级:框架的使用不需要依赖很多其他的东西。
2.Spring核心主要有两部分1)AOP:Aspect Oriented Programming,面向切面编程。
扩展功能不是由修改源代码来实现。
2)IoC:Inversion of Control,控制反转。
比如说,在类中有方法(不是静态的方法),现在若要调用类中的这些方法,就需要创建类的对象,使用对象调用这些方法。
创建对象的过程,就要用new来实现。
而Ioc,把创建类对象的过程交给spring配置完成,不再通过new来实现。
3.Spring是一站式框架Spring在JavaEE的三层结构中,每一层都提供了不同的解决技术。
---web层:SpringMVC---service层:Spring的IoC---dao层:Spring的jdbcTemplate4.Spring版本主用Spring4.x版本。
Spring的IoC操作把对象的创建直接交给Spring进行管理。
控制反转(Inversion of Control,英文缩写为IoC)是框架的重要特征,并非面向对象编程的专用术语。
它与依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)并没有关系。
IOC和DI的区别1)IoC:Inversion of Control,控制反转。
把对象的创建交给Spring进行配置。
2)DI:Dependency Injection,依赖注入。
向类中的属性设置值。
3)关系:依赖注入DI不能单独存在,需要在IoC的基础之上完成操作。
IoC操作方式1)XML配置文件方式;2)注解方式。
IoC底层原理IoC底层原理使用技术1)xml配置文件;2)dom4j解析xml;3)工厂设计模式;4)反射。
IoC底层原理进化流程最终方案:IoC第一步:创建xml配置文件,配置要创建的对象类。
<bean id="user" class="er"></bean>第二步:创建工厂类,使用dom4j解析配置文件+反射技术。
// 返回UserService对象的方法public static UserService getService(){// 1. 使用dom4j解析xml文件,得到id值对应的class属性值String classValue = “class属性值”;//2. 使用反射创建类对象Class clazz = Class.forName(classValue);// 创建类对象UserService service = clazz.newInstance();return service;}IoC入门案例第一步:导入jar包下载Spring压缩包并解压。
1)Jar包特点:每一个组件都有3个jar包。
2)做Spring的最基本功能时,4个核心jar包即可3)导入支持日志输出的jar包第二步:创建类,在类中创建方法第三步:创建Spring配置文件,配置创建的类Spring的核心配置文件的名称和位置是不固定的。
1)位置:建议放在src下面;2)名称:官方建议applicationContext.xml;在配置文件中引入schema约束。
目录:spring-framework-4.3.3.RELEASE\docs\spring-framework-reference\html 用网页打开最后一个文件,然后从文件的最后开始找。
在配置文件中配置创建的类。
第四步:写代码测试对象的创建以下这段代码仅在测试中使用。
配置文件没有提示问题Spring中引入schema约束,把约束文件引入到eclipse中。
1)复制schema约束路径。
/schema/beans/spring-beans.xsd2)菜单栏→ windows → preferences →搜索xml catalog,点击【Add】【Key】栏:把复制的schema约束路径粘贴到key中;【Location】栏:点击【filesystem】,找到并选中对应的schema约束文件;【Key type】栏:Schema location。
Spring的bean管理(xml方式)Bean实例化的方式1.在Spring中通过配置文件创建对象,这就叫做bean的实例化。
2.Bean的实例化有三种方式(2、3方式基本不用):1)使用类的无参构造函数创建(重点)如果类中没有无参构造函数,则会报如下错误:2)使用静态工厂创建创建静态的方法,返回类对象。
3)使用实例工厂创建创建非静态方法,返回对象。
Bean标签常用属性1.id属性--- 属性值任意命名,但不可以包含中文以及特殊字符。
--- 根据id属性值得到配置对象。
2.class属性--- 创建对象所在类的全路径名称。
属性--- 功能和id一致。
已基本不用。
--- 区别:id属性值不可以包含特殊字符,name属性值可以包含。
4.scope属性--- bean的作用范围。
常用属性值如下:属性注入在创建对象的过程中,可以向类中的属性设置值,这个过程叫做属性注入。
在Java代码中,有三种注入方式。
在Spring中,只支持前两种注入方式。
1)set方法注入(重点);2)有参构造函数注入。
有参构造函数注入注意:constructor-arg标签中的name属性值必须与有参构造函数中的参数名称一致,否则报错。
set方法注入(重点)注入对象类型属性(重点)需求:创建service类和dao类,在service类中利用属性注入获取dao对象。
实现过程:1)在service类中定义一个dao类型的属性;2)生成dao类型属性的set方法;3)在配置文件中注入关系。
P名称空间注入注入复杂类型属性Spring整合web项目原理加载Spring核心配置文件通过new对象,功能可以实现,但效率很低。
实现思想:让加载配置文件和创建对象的过程,在服务器启动时完成。
实现原理:1.使用到的技术:ServletContext对象、监听器。
2.具体实现:1)在服务器启动时,为每个项目创建一个ServletContext对象。
2)在Servlet对象创建时,使用监听器可以具体到ServletContext对象什么时候创建。
3)使用监听器听到ServletContext对象创建时,加载Spring配置文件,并创建配置文件的配置对象,然后把创建的对象放到ServletContext域对象里面(setAttribute方法),最后,在获取对象时,到ServletContext域对象中获取(getAttribute方法)。
Spring的bean管理(注解方式)注解介绍1.代码里面的特殊标记,使用注解可以完成相关功能。
2.注解写法:@注解名称(属性名称=属性值)。
3.注解可以使用在类上面、方法上面、属性上面。
Spring注解开发准备1.导入jar包。
1)导入Spring的基本jar包。
2)导入注解相关jar包。
2.创建类,在类中创建方法。
3.创建Spring配置文件,引入约束。
1)做IoC的基本功能,需要引入spring-beans约束;2)做Spring的IoC注解开发,需要引入新的约束:spring-context约束。
目录:spring-framework-4.3.3.RELEASE\docs\spring-framework-reference\html用网页打开最后一个文件,然后从文件的最后开始找。
4.开始注解扫描。
注解创建对象1.方式:在创建对象的类上面使用注解实现。
2.@Component注解是作用在类上面的,有以下三个衍生注解:3.注解创建对象默认是单实例的,用@scope注解设置是否单实例。
注解注入属性注入属性的注解有两个:@Autowired、@Resource。
需求:创建service类和dao类,在service类中利用注解注入属性获取dao对象。
@Autowired1)创建service和dao类文件。
2)在service类中定义dao类型属性,并使用注解。
(使用注解时,不需要使用set方法)3)注意:@Autowired注解,是根据注入的属性的类类型去匹配注入的对象的,而不是根据注入的类上@Component注解中的value的值,value的值可以任意写,符合命名规范就好。
@Resource@Resource注解中有一个name属性,该属性值为注解方式创建类对象中的value的值。
否则报错,如下:配置文件和注解混合使用创建对象的操作使用配置文件的方式实现。
注入属性的操作使用注解方式实现。
AOPAOP概述1.AOP:Aspect Oriented Programming,面向切面编程。
扩展功能不是由修改源代码来实现。
2.AOP采用横向抽取机制,取代了传统的纵向继承体系重复性代码,(性能监视、事务管理、安全检查、缓存)。
3.SpringAOP使用纯JAVA实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码。
4.AspectJ是一个基于Java语言的AOP框架,从Spring2.0开始,SpringAOP引入对AspectJ的支持,AspectJ扩展了Java语言,提供了一个专门的编译器,在编译时提供横向代码的织入。
AOP底层原理Aop:横向抽取机制,底层使用动态代理方式。
第一种,针对有接口的情况,使用jdk动态代理创建接口实现类代理对象。
第二种,针对没有接口的情况,使用cglib动态代理创建类的子类代理对象。
AOP术语public class User{public void add(){…}public void delete(){…}public void update(){…}public void find(){…}}Jointpoint(连接点):类中可以被增强的方法,这些方法可以被称之为连接点。
例如上面User 类中的add()、delete()、update()、find()等等方法。
Pointcut(切入点):在类中可以有很多的方法被增强,实际被增强的方法称为切入点。
例如只对User类中的add()方法和delete()方法进行了增强,则add()方法和delete()方法被称为切入点。
Advice(通知/增强):实际增强的逻辑,称为通知/增强。
例如,要对User类中的方法扩展日志功能,这个日志功能就称为增强。
通知分为5种:1)前置通知:在方法之前执行。
2)后置通知:在方法之后执行。
3)异常通知:在方法出现异常时执行。
4)最终通知:在后置通知之后执行。