收藏 分销(赏)

互联网spring企业开发.pptx

上传人:人****来 文档编号:6977908 上传时间:2024-12-24 格式:PPTX 页数:125 大小:748.35KB 下载积分:20 金币
下载 相关 举报
互联网spring企业开发.pptx_第1页
第1页 / 共125页
互联网spring企业开发.pptx_第2页
第2页 / 共125页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,北京传智播客教育,#,高级软件人才实作培训专家,!,北京传智播客教育,第一章,开始,spring,之旅,北京传智播客教育,知识,1:,Spring,介绍,Spring,是一个非常活跃的开源框架,;,它是一个基于,IOC,和,AOP,来构架多层,JavaEE,系统的框架,它的主要目地是简化企业开发,.,Spring,以一种非侵入式的方式来管理你的代码,,,Spring,提倡,”,最少侵入,”,,这也就意味着你可以适当的时候安装或卸载,Spring,北京传智播客教育,知识,2:,Spring,模块介绍,Spring,框架是一个分层架构,它包含一系列的功能要素,并被分为大约,20,个模块。这些模块分为,Core Container,、,Data Access/Integration,、,Web,、,AOP,(,Aspect Oriented Programming),、,Instrumentation,和测试部分,如下图所示:,北京传智播客教育,知识,3:,理解控制反转,(IOC),IOC,就是,Inversion of Control,public,class,Girl,private,Boy boy,=new Boy();,public,void,kiss(),System.,out,.println(boy.getBoyObject();,boy,是在,应用内部,创建及维护的,。,所谓,控制反转,就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。,这样控制权就由应用转移到了外部容器,,控制权的转移就是所谓反转,,目的是为了获得更好的扩展性和良好的可维护性。,北京传智播客教育,知识,4:,理解,依赖注入,(Dependency Injection),当我们把依赖对象交给外部容器负责创建,那么,Girl,类可以改成如下:,public,class,Girl,private,Boy boy;,public,void,kiss(),System.,out,.println(boy.getBoyObject();,所谓,依赖注入,就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。,北京传智播客教育,知识点,5:,实现,IOC,*org.springframework.asm-3.0.2.RELEASE.jar,Spring,独立的,asm,程序,Spring2.5.6,的时候需要,asmJar,包,3.0,开始提供他自己独立的,asmJar,。,*org.springframework.beans-3.0.2.RELEASE.jar,所有应用都要用到的,它包含访问配置文件、创建和管理,bean,以及进行,Inversion of Control/Dependency Injection,(,IoC/DI,)操作相关的所有类,*org.springframework.context-3.0.2.RELEASE.jar,Spring,提供在基础,IoC,功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、,JNDI,定位、,EJB,集成、远程访问、缓存以及各种视图层框架的封装等。,*org.springframework.core-3.0.2.RELEASE.jar,包含,Spring,框架基本的核心工具类,,Spring,其它组件要都要使用到这个包里的类,是其它组件的基本核心。,*org.springframework.expression-3.0.2.RELEASE.jar,Spring,表达式语言,*mons.logging-1.1.1.jar,(,spring-framework-3.0.2.RELEASE-dependencies,),第三方的主要用于处理日志,1:,到,www.springsource.org/download,下载,spring,,然后进行解压缩,在解压目录中找到下面,jar,文件,拷贝到类路径下,北京传智播客教育,知识点,5:,实现,IOC,2:,创建,java,类,public,class,Boy,public,void,display(),System.,out,.println(随便);,北京传智播客教育,知识点,5:,实现,IOC,3:,创建,spring,的配置模板,该配置模版可以从,spring,的参考手册或,spring,的例子中得到。配置文件的取名可以任意,文件可以存放在任何目录下,但考虑到通用性,一般放在类路径下。,北京传智播客教育,知识点,5:,实现,IOC,4:,在,spring,的配置文件中增加如下配置,北京传智播客教育,知识点,5:,实现,IOC,5:,加载,spring,的配置文件测试,public,class,App,public,static,void,main(String args),/,在类路径下,初始化,spring,容器,ApplicationContext ctx=,new,ClassPathXmlApplicationContext(beans.xml);,/,从,spring,容器中获取,boy,对象,Boy boy=(Boy)ctx.getBean(boy);,/,调用,boy,对象的,display,方法,boy.display();,北京传智播客教育,知识点,6:,实现,DI,1.,创建,girl,类,public,class,Girl,private,Boy boy;,public,void,setBoy(Boy boy),System.,out,.println(setBoy +boy);,this,.boy=boy;,public,void,kiss(),boy.display();,北京传智播客教育,知识点,6:,实现,DI,2.,在,spring,的,beans.xml,文件中增加如下配置,红色的为新增加的,!-,依赖注入 把,boy,对象传递给,girl property name=boy1,使用,public void,setBoy1(Boy boy1),北京传智播客教育,知识点,6:,实现,DI,3.,测试,public,class,App,public,static,void,main(String args),/,加载,spring,的,xml,文件,初始化,spring,容器,ApplicationContext ctx=,new,ClassPathXmlApplicationContext(cn/itcast/di/beans.xml);,/,从,spring,容器中获取,Girl,对象,Girl girl=(Girl)ctx.getBean(girl);,/,调用,boy,对象的,display,方法,girl.kiss();,北京传智播客教育,知识点,7:,从,spring,容器中得到,bean,当,spring,容器启动后,因为,spring,容器可以管理,bean,对象的创建,销毁等生命周期,所以我们只需从容器直接获取,Bean,对象就行,而不用编写一句代码来创建,bean,对象。从容器获取,bean,对象的代码如下:,ApplicationContext ctx=,new,ClassPathXmlApplicationContext(beans.xml);,Girl girl=(Girl)ctx.getBean(girl);,北京传智播客教育,知识点,8:,实例化,spring,容器的方式,实例化,Spring,容器常用的两种方式:,方法一,:,在类路径下寻找配置文件来实例化容器,ApplicationContext,ctx=,new ClassPathXmlApplicationContext(new Stringbeans.xml);,可以在整个类路径中寻找,xml,文件,*通过这种方式加载。需要将,spring,的配置文件放到当前项目的,classpath,路径下,*classpath,路径指的是当前项目的,src,目录,该目录是,java,源文件的存放位置。,方法二,:,在文件系统路径下寻找配置文件来实例化容器,ApplicationContext,ctx=,new FileSystemXmlApplicationContext(new String“d:beans.xml“);,Spring,的配置文件可以指定多个,可以通过,String,数组传入。,北京传智播客教育,知识点,9:,为何要使用,Spring,至少在我看来,在项目中引入,spring,立即可以带来下面的好处,降低组件之间的耦合度,实现软件各层之间的解耦。,可以使用容器提供的众多服务,如:,事务管理服务,、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务,.,也不需处理复杂的事务传播。,容器提供单例模式支持,开发人员不再需要自己编写实现代码。,容器提供了,AOP,技术,利用它很容易实现如权限拦截、运行期监控等功能。,容器提供的众多辅作类,使用这些类能够加快应用的开发,如:,JdbcTemplate,、,HibernateTemplate。,Spring,对于主流的应用框架提供了集成支持,如:集成,Hibernate,、,JPA,、,Struts,等,这样更便于应用的开发。,Controller,Service,DAO,北京传智播客教育,知识点,9:,使用,Spring,的好处,当使用,spring,时,我们可以使用容器提供的众多服务,北京传智播客教育,第二章,装配,Bean,北京传智播客教育,知识点,1:,三种实例化,bean,的方式,1.,使用类构造器实例化,(,默认无参数,),2.,使用静态工厂方法实例化,(,简单工厂模式,),public,class,PersonServiceFactory,public,static,PersonService createPersonService(),return,new,PersonServiceImpl();,3.,使用实例工厂方法实例化,(,工厂方法模式,):,public class PersonServiceFactory,public PersonService createPersonService(),return new PersonServiceImpl();,北京传智播客教育,知识点,2:Bean,的作用域,*,singleton(,默认值,),在每个,Spring IoC,容器中一个,bean,定义只有一个对象实例,(,共享,),。,默认情况下会在容器启动时初始化,bean,,但我们可以指定,Bean,节点的,lazy-init=“true”,来延迟初始化,bean,,这时候,只有第一次获取,bean,会才初始化,bean,。如:,如果想对所有,bean,都应用延迟初始化,可以在根节点,beans,设置,default-lazy-init=“true“,,如下:,*prototype,允许,bean,可以被多次实例化,(,使用一次就创建一个实例,),*request,*session,*global session,(,Portlet规范将portlet定义为一种“基于Java技术的web组件,由处理请求和生成动态内容的portlet容器管理”,),北京传智播客教育,知识点,3:,指定,Bean,的初始化方法和销毁方法,Spring,初始化,bean,或销毁,bean,时,有时需要作一些处理工作,,因此,spring,可以在创建和拆卸,bean,的时候调用,bean,的两个生命,周期方法。,当,bean,被载入到容器的时候调用,setup,当,bean,从容器中删除的时候调用,teardown(scope=,singleton,有效,),北京传智播客教育,知识点,4:,依赖注入,*,手工装配,*使用xml配置文件,*使用属性setter方法注入,4.1,*使用构造器注入,4.2,*使用注解,*autowired注解,4.3,*resource注解,4.4,*自动装配,4.5,*byType:,按类型装配,*byName,:,按名称装配,*constructor,装配,,,*autodetect,不确定装配。,注入依赖对象可以采用,手工装配,或,自动装配,,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。,北京传智播客教育,知识点,4:,依赖注入,4.1:,手工装配,-,-,使用xml配置文件,-,-,使用属性setter方法注入,通过,setter,方法注入依赖,元素的,子元素指明了使用它们的,set,方法来注入。可以注入任何东西,从基本类型到集合类,甚至是应用系统的,bean,。,北京传智播客教育,知识点,4:,依赖注入,通过,setter,方法注入依赖,*,简单,bean,配置,配置,bean,的简单属性,基本数据类型和,String,。,4.1:,手工装配,-,-,使用xml配置文件,-,-,使用属性setter方法注入,北京传智播客教育,知识点,4:,依赖注入,通过,setter,方法注入依赖,引用其它,bean,(外部,bean,),4.1:,手工装配,-,-,使用xml配置文件,-,-,使用属性setter方法注入,北京传智播客教育,知识点,4:,依赖注入,通过,setter,方法注入依赖,*内部,bean,这种方式的缺点是你无法在其它地方重用这个,personClass,实例,原因是它是专门为,personService,而用。,4.1:,手工装配,-,-,使用xml配置文件,-,-,使用属性setter方法注入,北京传智播客教育,依赖注入,-,手工装配,-XML,方式,通过,setter,方法注入依赖,*装配集合,若,bean,的属性是集合类型,按如下处理:,A,、装配,List,和数组,:,obj1,obj2,list1,list2,4.1:,手工装配,-,-,使用xml配置文件,-,-,使用属性setter方法注入,北京传智播客教育,知识点,4:,依赖注入,通过,setter,方法注入依赖,*装配集合,B,、,装配,set,:,set,使用方法和,list,一样,不同的是对象被装配到,set,中,而,list,是装配到,List,或数组中装配。,set1,set2,4.1:,手工装配,-,-,使用xml配置文件,-,-,使用属性setter方法注入,北京传智播客教育,知识点,4:,依赖注入,通过,setter,方法注入依赖,*装配集合,C,、,装配,map,:,map,中的,的数值和,以及,的一样,可以使任何有效的属性元,素,需要注意的是,key,值必须是,String,的。,map01,map02,4.1:,手工装配,-,-,使用xml配置文件,-,-,使用属性setter方法注入,北京传智播客教育,知识点,4:,依赖注入,通过,setter,方法注入依赖,*装配集合,D,、装配,Properties,:,prop1,prop2,4.1:,手工装配,-,-,使用xml配置文件,-,-,使用属性setter方法注入,北京传智播客教育,知识点,4:,依赖注入,通过,setter,方法注入依赖,*装配集合(,List,),E,、设置,null,:,4.1:,手工装配,-,-,使用xml配置文件,-,-,使用属性setter方法注入,北京传智播客教育,知识点,4:,依赖注入,通过构造函数注入依赖,通过参数的顺序:,张三,56,4.2:,手工装配,-,-,使用xml配置文件,-,-,通过构造函数,注入,北京传智播客教育,知识点,4:,依赖注入,通过构造函数注入依赖,通过参数的类型:,56,张三,4.2:,手工装配,-,-,使用xml配置文件,-,-,通过构造函数,注入,北京传智播客教育,知识点,4:,依赖注入,.,在,java,代码中使用,Autowired,或,Resource,注解方式进行装配的前提条件是。,1,、,引入,context,命名空间 需要在,xml,配置文件中配置以下信息:,2,、在配置文件中添加,context:annotation-config,标签,这个配置隐式注册了多个对注释进行解析处理的处理器,AutowiredAnnotationBeanPostProcessor,,,CommonAnnotationBeanPostProcessor,,,PersistenceAnnotationBeanPostProcessor,,,RequiredAnnotationBeanPostProcessor,注:,Resource,注解在,spring,安装目录的,spring-framework-3.0.2.RELEASE-dependenciesjavax.annotationcom.springsource.javax.annotation1.0.0,包下,com.springsource.javax.annotation-1.0.0.jar,手工装配,-,-,使用,注解方式,北京传智播客教育,知识点,4:,依赖注入,.,注意:,*如果使用,jdk1.5,,需要引入,com.springsource.javax.annotation-1.0.0.jar,包,*如果使用,jdk1.6,,不需要引入,com.springsource.javax.annotation-1.0.0.jar,包,com.springsource.javax.annotation-1.0.0.jar,该,jar,包在,spring-framework-3.0.2.RELEASE-dependenciesjavax.annotationcom.springsource.javax.annotation1.0.0,包,下,手工装配,-,-,使用,注解方式,北京传智播客教育,知识点,4:,依赖注入,Autowired,标注在字段上,*Autowired,注解默认按类型进行装配,*获取该注解标注的字段的类型,-PersonDao,类型,*以该类型为条件到,spring,容器,(beans.xml),中去查找,bean,的,id,节点的类型是,PersonDao,类型,.,*,找到以后,获取该节点对应的对象,利用反射直接为,personDao,变量赋值,*Qualifier(“personDao”),该注解以名字为条件查找依赖对象,*以该注解的的参数,personDao,条件到,spring,容器,(beans.xml),中去查找,bean,的,id,节点的,值是,personDao,的对象,*找到以后,获取该节点对应的对象,利用反射直接为,personDao,变量赋值,如果不存在该名称,抛出异常,4,.3:,手工装配,-,-,使用,注解方式,-,autowired,注解,Autowired,private PersonDao personDao,;/,用于字段上,Autowired,Qualifier(personDao),private PersonDao personDao,;/,用于字段上,北京传智播客教育,知识点,4:,依赖注入,Autowired,public void setPersonDao(PersonDao personDao),/,用于属性的,set,方法上,this.personDao=personDao;,Autowired,public void setPersonDao(,Qualifier(personDao),PersonDao personDao),/,用于属性的,set,方法上,this.personDao=personDao;,4,.3:,手工装配,-,-,使用,注解方式,autowired,注解,Autowired,标注在,setter,方法上,Autowired注解默认按类型进行装配,*获取 setPersonDao()方法的参数的类型-PersonDao类型,*以该类型为条件到spring容器(beans.xml)中去查找bean的id节点的类型是PersonDao类型.,*找到以后,获取该节点对应的对象,把该对象作为实参传递给该setPersonDao(,PersonDao personDao)的形参.,*Qualifier(personDao)该注解以名字为条件查找依赖对象,*以该注解的的参数personDao条件到spring容器(beans.xml)中去查找bean的id节点的,值是PersonDao的对象,*,找到以后,获取该节点对应的对象,把该对象作为实参传递给该setPersonDao(,PersonDao personDao)的形参.,*如果不存在该名称,抛出异常,北京传智播客教育,知识点,4:,依赖注入,Resource,注解标注在字段上,*Resource注解默认按名称装配。,*如果没有指定name属性,*获取该注解标注的字段值-personDao,*以该字段值为条件到spring容器(beans.xml)中去查找bean的id节点的值是 personDao的节点,*找到以后,获取该节点对应的对象,利用反射直接为personDao变量赋值,*,如果没有找到.并且按照默认的名称找不到依赖对象时,Resource注解会回退到按类型装配,*获取该注解标注的字段类型-PersonDao,*以该类型为条件到spring容器(beans.xml)中去查找bean的节点的类型是PersonDao类型,的对象,*找到以后,获取该节点对应的对象,利用反射直接为personDao变量赋值,*如果指定name属性 只能按名称装配,*获取name属性的值 personDao,*以该值为条件到spring容器(beans.xml)中去查找bean的id节点的值是PersonDao的对象,*找到以后,获取该节点对应的对象,利用反射直接为personDao变量赋值,*如果不存在该名称,抛出异常,4,.4:,手工装配,-,-,使用,注解方式,-,resource,注解,Resource(name=personDao),private PersonDao personDao,;,;/,用于字段上,北京传智播客教育,知识点,4:,依赖注入,Resource(name=personDao),public void setPersonDao(PersonDao personDao),this.personDao=personDao;,4,.4:,手工装配,-,-,使用,注解方式,resource,注解,resource,注解标注在,setter,方法上,*Resource,注解默认按名称装配。,*如果没有指定,name,属性,*获取,setPersonDao(),方法的属性名,-personDao,*,以该属性名为条件到,spring,容器,(beans.xml),中去查找,bean,的,id,节点的值是,personDao,的节点,*找到以后,获取该节点对应的对象,把该对象作为实参传递给该,setPersonDao(,PersonDao personDao),的形参,.,*,如果没有找到,.,并且按照默认的名称找不到依赖对象时,,Resource,注解会回退到按类型装配,*获取,setPersonDao(),方法的参数类型,-PersonDao,*,以该类型为条件到,spring,容器,(beans.xml),中去查找,bean,的节点的类型是,PersonDao,类型对象,*找到以后,获取该节点对应的对象,把该对象作为实参传递给该,setPersonDao(,PersonDao personDao),方法的形参,*如果指定,name,属性 只能按名称装配,*获取,name,属性的值,*以该值为条件到,spring,容器,(beans.xml),中去查找,bean,的,id,节点的值是,PersonDao,的对象,*找到以后,获取该节点对应的对象,把该对象作为实参传递给该,setPersonDao(,PersonDao personDao),的形参,.,*,如果不存在该名称,抛出异常,北京传智播客教育,知识点,4:,依赖注入,对于自动装配,大家了解一下就可以了,实在不推荐大家使用。例子:,autowire,属性取值如下,*byType:,按类型装配,可以根据属性的类型,在容器中寻找跟该类型匹配的,bean,。如果发现多个,那么将会抛出异常。如果没有找到,即属性值为,null,。,*byName,:,按名称装配,可以根据属性的名称,在容器中寻找跟该属性名相同的,bean,,如果没有找到,即属性值为,null。,*constructor,与,byType,的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的,bean,,那么将会抛出异常。,*autodetect,:,首先尝试使用,constructor,来自动装配,然后使用,byType,方式。不确定性的处理与,constructor,方式和,byType,方式一致。,4,.5:,自动,装配,(了解知识),北京传智播客教育,知识点,5:,指定,Bean,的初始化方法和销毁方法,(,注解,),Spring,初始化,bean,或销毁,bean,时,有时需要作一些处理工作,因此,spring,可以在创建和拆卸,bean,的时候调用,bean,的两个生命周期方法。,当,bean,被载入到容器的时候调用,setup,注解方式下,:,PostConstruct,初始化,当,bean,从容器中删除的时候调用,teardown(scope=,singleton,有效,),注解方式如下,:,PreDestroy,销毁,北京传智播客教育,知识点,6:,classpath,自动扫描把组件纳入,spring,容器中管理,前面的例子我们都是使用,XML,的,bean,定义来配置组件。在一个稍大的项目中,通常会有上百个组件,如果这些组件采用,xml,的,bean,定义来配置,,,显然会增加配置文件的体积,,,查找及维护起来也不太方便,。,Spring3.0,为我们引入了组件自动扫描机制,它可以在类路径底下寻找,标注了,Component,、,Service,、,Controller,、,Repository,注解的类,,,并把这些类纳入进,spring,容器中管理,。,它的作用和在,xml,文件中使用,bean,节点配置组件是一样的,。,要使用自动扫描机制,我们需要打开以下配置信息,:,1,、引入,context,命名空间 需要在,xml,配置文件中配置以下信息:,北京传智播客教育,知识点,6:,classpath,自动扫描把组件纳入,spring,容器中管理,2,、在配置文件中添加,context:component-scan,标签,其中,base-package,为需要扫描的包,(,含子包,)。,注,:,1,、在使用组件扫描元素时,,AutowiredAnnotationBeanPostProcessor,和,CommonAnnotationBeanPostProcessor,会隐式地被包括进来。也就是说,连个组件都会被自动检测,并,织入,-,所有这一切都不需要在,XML,中提供任何,bean,配置元数据。,2,、功能介绍,Service,用于标注业务层组件、,Controller,用于标注控制层组件(如,struts,中的,action,)、,Repository,用于标注数据访问组件,即,DAO,组件。,而,Component,泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。,北京传智播客教育,通过在,classpath,自动扫描方式把组件纳入,spring,容器中管理,/Dao,层,import,org.springframework.stereotype.Repository;,import,com.itcast.dao.PersonDao;,Repository(personDao),public,class,PersonDaoBean,implements,PersonDao,/,业务层,import,javax.annotation.Resource;,import,org.springframework.stereotype.Service;,import,com.itcast.dao.PersonDao;,import,com.itcast.service.PersonService;,Service(personService),public,class,PersonServiceBean,implements,PersonService,Resource(name=personDao),private,PersonDao personDao;,北京传智播客教育,第三章,面向切面编程,北京传智播客教育,知识点,1:,AOP-,代理对象,代理模式,:,代理模式的英文叫做,Proxy,或,Surrogate,,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,抽象主题角色,:,声明了真实主题和代理主题的共同接口,,这样一来在任何可以使用真实主题的地方都可以是使用代理主题,代理主题(,Proxy,)角色,:代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主题控制对真实主题的引用,负责在需要的时候创建真实主题对象(和删除真实主题对象);代理角色通常在将客户端调用传递给真实的主题之前或之后,都要执行某个操作,而不是单纯地将调用传递给真实主题对象。,真实主题角色,:定义了代理角色所代表地真实对象,代理对象,代理主题,目标对象,真实主题,客户端,代理模式示意图,北京传智播客教育,知识点,2:,JDK,动态代理,import,java.lang.reflect.InvocationHandler;,import,java.lang.reflect.Method;,import,java.lang.reflect.Proxy;,public,class,JDKProxy,implements,InvocationHandler,private,Object targerObject,;/,代理的目标对象,/*,*,创建代理对象,*,param,targerObject,目标对象,*,return,*/,public,Object createProxyInstance(Object targerObject),this,.targerObject=targerObject;,/*,*,第一个参数设置代码使用的类加载器,一般采用跟目标类相同的类加载器,*第二个参数设置代理类实现的接口,跟目标类使用相同的接口,*第三个参数设置回调对象,当代理对象的方法被调用时,会调用该参数指定对象的,invoke,方法,*,/,return,Proxy.,newProxyInstance,(,targerObject.getClass().getClassLoader(),targerObject.getClass().getInterfaces(),this,);,北京传智播客教育,JDK,动态代理,/*,*,param,proxy,目标对象的代理类实例,*,param,method,对应于在代理实例上调用接口方法的,Method,实例,*,param,args,传入到代理实例上方法参数值的对象数组,*,return,方法的返回值 没有返回值时是,null,*/,public,Object invoke(Object proxy,Method method,Object args),throws,Throwable,System.,out,.println(,代理类实例,+proxy.getClass();,System.,out,.println(,方法名称,+method.getName();,if,(args!=,null,&args.length0),/,方法的参数值,for,(,int,i=0;i0),/,方法的参数值,for,(,int,i=0;iargs.length;i+),System.,out,.println(,方法参数,+argsi);,Object returnvalue=,null,;,/,方法的返回值,无返回类型时,为,null,returnvalue=methodProxy.invoke(,this,.targerObject,args);,/,调用目标对象的方法,System.,out,.println(,方法的返回值,+returnvalue);,return,returnvalue;,北京传智播客教育,使用,Spring,进行面向切面(,AOP,)编程,要进行,AOP,编程,首先我们要在,spring,的配置文件中引入,aop,命名空间:,Spring,提供了两种切面使用方式,实际工作中我们可以选用其中一种:,基于,XML,配置方式进行,AOP,开发。,基于注解方式进行,AOP,开发。,北京传智播客教育,使用,Spring,进行面向切面(,AOP,)编程,要进行,AOP,编程,需要引入的,jar,包,*,.sf.cglib-2.2.0.jar,cglib,代理,*,com.springsource.org.aopalliance-1.0.0.jar,*com.springsource.org.aspectj.tools-1.6.6.RELEASE.jar,*org.springframework.aop-3.0.2.RELEASE.jar,spring,的面向切面编程,提供,AOP(,面向切面编程,),实现,*,org.springframework.aspects-3.0.2.RELEASE.jar,spring,提供对,AspectJ,框架的整合,北京传智播客教育,定义切面和通知,/,切面,public class Security,/,通知,public void checkSecurity(JoinPoint point),System.,out,.println(,进行安全性检查,);,System.,out,.println(point.getTarget()+point.getTarget();,/,获取方法调用方法的名称,System.,out,.println(point.getSignature().getName()+point.getSignature().getName();,/,获取方法的参数,if(point.getArgs()!=null&point.getArgs().length0),for(int i=0;ipoint.getArgs().length;i+),System.,out,.println(point.getArgs()+point.getArgs()i);,北京传智播客教育,知识点,6:,基于,XML,配置,前置通知,配置文件如下,北京传智播客教育,知识点,7:,基于,XML,配置,后置通知,public class Security,public void checkSecurity(JoinPoint point,Object retval),System.out.println(,进行安全性检查,);,/,获取目标对象方法的返回值,System.out.println(retval,返回值:,+retval);,配置文件如下,北京传智播客教育,知识点,8:
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服