您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > 黑马程序员:三大框架11天笔记全之Spring-day09笔记
黑马程序员郑州中心编著黑马程序员:三大框架Spring-day09笔记Bean的属性注入在spring中bean的属性注入有两种1.1构造器注入1.2Setter方法注入关于ref属性作用使用ref来引入另一个bean对象,完成bean之间注入1.3集合属性的注入在spring中对于集合属性,可以使用专门的标签来完成注入例如:listsetmapproperties等集合元素来完成集合属性注入.黑马程序员郑州中心编著1.3.1List属性注入如果属性是数组类型也可以使用list完成注入1.3.2Set属性注入1.3.3Map属性注入1.3.4Properties属性注入Java.util.Properties是java.utilsMap的实现类,它的key与value都是String类型.黑马程序员郑州中心编著1.4名称空间p和c的使用Spring2.0以后提供了xml命名空间。P名称空间C名称空间首先它们不是真正的名称空间,是虚拟的。它是嵌入到spring内核中的。使用p名称空间可以解决我们setter注入时property简化使用c名称空间可以解决我们构造器注入时constructor-arg简化使用setter注入在applicationContext.xml文件中添加p名称空间简化setter注入黑马程序员郑州中心编著使用c名称空间来解决构造器注入在applicationContext.xml文件中添加c名称空间注:如果c或p名称空间操作的属性后缀是”-ref”代表要引入另一个已经存在的bean,例如1.5SpElspringexpressionlanguage是在spring3.0以后的版本提供它类似于ognl或el表达式,它可以提供在程序运行时构造复杂表达式来完成对象属性存储及方法调用等。Spel表达式的格式#{表达式}示例1:完成bean之间的注入黑马程序员郑州中心编著示例2支持属性调用及方法调用第2章Spring注解开发在spring中使用注解,我们必须在applicationContext.xml文件中添加一个标签context:annotation-config/作用是让spring中常用的一些注解生效。要使用contex名称空间,必须在applicationContext.xml文件中引入2.1完成bean注册操作@Component黑马程序员郑州中心编著测试时报错原因:如果你使用的是spring3.x那么不会出现这个错误,如果使用的是spring4.x会报错,原因是缺少jar包。导入jar后运行还有错误我们在applicationContext.xml文件中使用了一个标签context:annotation-config/,它代表的是可以使用spring的注解,但是我们在类上添加的注解,spring不知道位置。要解决这个问题,我们可以使用context:component-sacnbase-package=””黑马程序员郑州中心编著在spring2.5后为@Component添加了三个衍生的注解@Rpository用于DAO层@Service用于service层@Controller用于表现层对于我们的bean所处在的位置可以选择上述三个注解来应用,如果你的bean不明确位置,就可以使用@Component.2.2属性依赖注入1.简单的属性注入2.复杂的属性注入注意:如果要扫描多个包下的注解可以写成以下:或黑马程序员郑州中心编著注意:@Value@Autowired它们可以修饰属性,也可以修饰setter方法,如果写在属性上,就不需要提供setter方法。@Autowired它默认是根据类型进行注入。如果与@Qualifier一起使用,就可以根据名称来进行注入。我们也可以使用下面的方式来根据名称进行属性注入2.3其它注解@Scope它以描述bean的作用域。黑马程序员郑州中心编著它相当于init-method=”myInit它相当于是destroy-method=”myDestroy”注意:对于销毁的方法它只对bean的scope=singleton有效。第3章Spring在web开发中的应用1.,在web项目中要使用spring需要导入一个jar包2.在web.xml文件中配置Listener这个ContextLoaderListener它实现了ServletContextListener在这个listener中,当服务器启动时,将ApplicationContext对象,其实是它的一个实现类WebApplicationContext,对象存入到了ServletContext中。黑马程序员郑州中心编著3.我们还需要在web.xml文件中配置applicationContext.xml文件的位置默认情况下会在WEB-INF目录下查找applicationContext.xmls如果applicationContext.xml文件不是在默认位置,我们可以在web.xml文件中配置Classpath:applicationContext.xml它代表的是在当前工程的类路径下(可以理解成是在src)下来查找applicationContext.xml文件。contextConfigLocation它是在listener中声明的一个常量,描述的就是spring配置文件的位置。第4章Spring整合junit4测试Spring整合junit4可以方便我们的测试。1.需要导入一个spring-test.jar包2.可以在测试类上如下操作黑马程序员郑州中心编著第5章SpringAOP5.1AOP概述在软件业,AOP为AspectOrientedProgramming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP是一个概念,并没有设定具体语言的实现,它能克服那些只有单继承特性语言的缺点,spring2.0之后整合AspectJ第三方AOP技术。AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。5.1.1主要功能日志记录,性能统计,安全控制,事务处理,异常处理等等5.1.2主要意图将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划黑马程序员郑州中心编著分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。AOP与OOP区别OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。换而言之,OOD/OOP面向名词领域,AOP面向动词领域。5.2AOP相关术语5.2.1目标对象target指的是需要被增强的对象,由于springaop是通过代理模式实现,从而这个对象永远是被代理对象。5.2.2连接点(joinpoint)所谓连接点是指那些被拦截到的点,在spring中这些点指的是方法,因为spring只支持方法类型的连接点黑马程序员郑州中心编著5.2.3切入点(pointcut)表示一组jointpoint,这些jointpoint或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的Advice将要发生的地方简单说切入点是指我们要对哪些连接点进行拦截的定义5.2.4通知(advice)所谓通知是指拦截到连接点之后所要做的事情就是通知,通知分为前置通知,后置通知,异常通知,最终通知,环绕通知Advice定义了在pointcut里面定义的程序点具体要做的操作5.2.5引介introduction引介是一种特殊的通知,在不修改类代码的前提下,introduction可以在运行期为类动态地添加一些方法或属性5.2.6切面aspect是切入点和通知的结合5.2.7织入weaving织入是一个过程,是将切面应用到目标对象从而创建出AOP代理对象的过程,织入可以在编译期,类装载期,运行期进行。Spring采用动态织入,而aspectj采用静态织入黑马程序员郑州中心编著5.2.8代理Proxy一个类被AOP织入增强后,就产生一个结果代理类5.3AOP底层实现AOP分为静态AOP和动态AOP。静态AOP是指AspectJ实现的AOP,他是将切面代码直接编译到Java类文件中。动态AOP是指将切面代码进行动态织入实现的AOP。Spring的AOP为动态AOP,实现的技术为:JDK提供的动态代理技术和CGLIB(动态字节码增强技术)5.3.1JDK动态代理在运行,在JVM内部动态生成class字节码对象(Class对象)Jdk动态代理只针对于接口操作第一个参数:目标类的类加载器对象第二个参数:目标类的实现接口的Class[]第三个参数:InvocationHandler它是一个接口,它的作用是是代理实例的调用处理程序实黑马程序员郑州中心编著现的接口,接口中定义了一个方法目标Target代理工厂黑马程序员郑州中心编著5.3.2CGLIB动态代理CGLIB(CodeGenerationLibrary)是一个开源项目是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类如果你要单独使用CGLIB,那么需要导入cglib的jar包还需要一个asm相关jar包,但是spring框架的spring-core.jar包中已经集成了cglib与asm注意:jdk的动态代理只可以为接口去完成操作,而cglib它可以为没有实现接口的类去做代理,也可以为实现接口的类去做代理。黑马程序员郑州中心编著Cglib动态代理setCallback传递的参数是Callback类型,我们使用的是MethodInterceptor注意:cglib它可以为没有实现接口的类做代理,也可以为接口类做代理.问题:spring采用的是哪一种动态机制:如果目标对象,有接口,优先使用jdk动态代理如果目标对象,无接口,使用cglib动态代理。黑马程序员郑州中心编著5.4SpringAOP编程5.4.1Spring的传统aop编程讲解的目的是为了更好的理解aop。在传统的springaop开发中它支持增强(advice)有五种:1.前置通知目标方法执行前增强org.springframework.aop.MethodBeforeAdvice2.后置通知目标方法执行后增强org.springframework.aop.AfterReturningAdvice3.环绕通知目标方法执行前后进行增强org.aopalliance.intercept.MethodInterceptor4.异常抛出通知目标方法抛出异常后的增强org.springframework.aop.ThrowsAdvice5.引介通知在目标类中添加一些新的方法或属性(不讲解)org.springframework.aop.IntroductionInterceptor5.4.1.1经典的基于代理的AOP开发(了解)基本的jar包1.bean2.core3.context4.expression5.aop黑马程序员郑州中心编著6.需要aop联盟的依赖jar包第一步:编写目标(target)第二步增强(advice)第三步在applicationCon
本文标题:黑马程序员:三大框架11天笔记全之Spring-day09笔记
链接地址:https://www.777doc.com/doc-4225388 .html