Spring总结
- 格式:docx
- 大小:361.92 KB
- 文档页数:16
Spring总结与思考1、Spring是什么?Spring是⼀个轻量级的控制反转(IoC)和⾯向切⾯(AOP)的容器(框架)。
它的主要⽬得是简化企业开发。
Spring 框架是⼀个分层架构,由 7 个定义良好的模块组成。
Spring 模块构建在核⼼容器之上,核⼼容器定义了创建、配置和管理 bean 的⽅式 .组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他⼀个或多个模块联合实现。
每个模块的功能如下:核⼼容器Spring Core:核⼼容器提供 Spring 框架的基本功能。
核⼼容器的主要组件是BeanFactory,它是⼯⼚模式的实现。
BeanFactory 使⽤控制反转(IOC)模式将应⽤程序的配置和依赖性规范与实际的应⽤程序代码分开。
Spring 上下⽂Spring Context:Spring 上下⽂是⼀个配置⽂件,向 Spring 框架提供上下⽂信息。
Spring 上下⽂包括企业服务,例如 JNDI、EJB、电⼦邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP 模块直接将⾯向切⾯的编程功能 , 集成到了 Spring 框架中。
所以,可以很容易地使 Spring 框架管理任何⽀持 AOP的对象。
Spring AOP 模块为基于 Spring 的应⽤程序中的对象提供了事务管理服务。
通过使⽤ Spring AOP,不⽤依赖组件,就可以将声明性事务管理集成到应⽤程序中。
Spring DAO:对JDBC的抽象,简化了数据访问异常的处理;Spring ORM:对现有的ORM框架的⽀持;Spring Web 模块:提供了基本的⾯向Web的综合特性,例如多⽅⽂件上传;Spring MVC 框架:提供⾯向Web应⽤的Model-View-Controller实现。
2、Spring 的优点?(1)spring属于低侵⼊式设计,代码的污染极低;(2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;3)Spring提供了AOP技术,⽀持将⼀些通⽤任务,如安全、事务、⽇志、权限等进⾏集中式管理,从⽽提供更好的复⽤。
Springboot总结:核⼼功能和优缺点SpringBoot核⼼功能1、独⽴运⾏Spring项⽬Spring boot 可以以jar包形式独⽴运⾏,运⾏⼀个Spring Boot项⽬只需要通过java -jar xx.jar来运⾏。
2、内嵌servlet容器Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这样我们⽆须以war包形式部署项⽬。
3、提供starter简化Maven配置spring提供了⼀系列的start pom来简化Maven的依赖加载,例如,当你使⽤了spring-boot-starter-web,会⾃动加⼊如图5-1所⽰的依赖包。
4、⾃动装配SpringSpringBoot会根据在类路径中的jar包,类、为jar包⾥⾯的类⾃动配置Bean,这样会极⼤地减少我们要使⽤的配置。
当然,SpringBoot只考虑⼤多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean,⽽SpringBoot灭有提供⽀持,则可以⾃定义⾃动配置。
5、准⽣产的应⽤监控SpringBoot提供基于http ssh telnet对运⾏时的项⽬进⾏监控。
6、⽆代码⽣产和xml配置 SpringBoot不是借助与代码⽣成来实现的,⽽是通过条件注解来实现的,这是Spring4.x提供的新特性。
SpringBoot优缺点优点:快速构建项⽬。
对主流开发框架的⽆配置集成。
项⽬可独⽴运⾏,⽆须外部依赖Servlet容器。
-提供运⾏时的应⽤监控。
极⼤的提⾼了开发、部署效率。
与云计算的天然集成。
缺点:如果你不认同spring框架,也许这就是缺点。
SpringBoot特性创建独⽴的Spring项⽬内置Tomcat和Jetty容器提供⼀个starter POMs来简化Maven配置提供了⼀系列⼤型项⽬中常见的⾮功能性特性,如安全、指标,健康检测、外部配置等完全没有代码⽣成和xml配置⽂件SpringBoot CLISpringBoot CLI 是SpringBoot提供的控制台命令⼯具。
Spring总结————spring核⼼Core⼀、spring的概念spring是⼀个开源的,轻量级控制反转和⾯向切⾯的容器框架,解决企业应⽤开发的复杂性,降低耦合,更易于测试。
spring春天。
如果写⼀个⼩的项⽬,我们可以在项⽬中想创建⼀个对象就创建i个对象,但对于⼤型项⽬来说,可能需要依赖⼏百个类,类与类关系也⾮常复杂,我们就不能把创建对象和维护对象之间的关系放到项⽬中,可以采⽤⽣活中分⼯合作的⽅式,把对象的创建和维护关系给剥离出来,找⼀个⼯⼚类的东西去⼲这些事,这样项⽬如果需要对象了,就从⼯⼚类中去取。
spring就是为了让我们以后能够做⼤的项⽬准备的。
spring核⼼的功能就是⼀个⼯⼚模式,spring相当于为你的项⽬专门成⽴⼀个⼯⼚,这个⼯⼚负责创建对象,委会对象之间的关系,以前是直接new,现在从spring的⼯⼚⾥⾯获取。
⼆、spring的bean的常⽤属性scopescope⽤来配置bean对象是否是单例测试。
单例模式是java的23种设计模式之⼀,指在这个项⽬运⾏过程中⼀个类的对象只会实例化⼀次。
⼀般,⼯⼚类的对象都是单例模式。
⾮单例模式叫多例模式或者原型模式。
spring⼯⼚中的对象默认都是单例模式,如果我们想把对象配置成多例模式,可以配置bean的scope属性,scope常⽤的两个取值:singleon默认值单例模式prototype 原型模式多例模式单例模式下,对象是在⼯⼚初始化的时候创建的。
多例模式是在⼯⼚初始化之后,获取对象的时候创建的。
autowireautowire⽤来配置spring对象属性的默认的装配⽅式。
有三个取值no:默认值不启⽤⾃动装配byType:根据类型⾃动装配byName:根据名称⾃动装配,⼀般bean的name如果不声明默认值取的就是id三、spring的bean的属性注⼊的两种⽅式设值注⼊设值注⼊要求:要求属性在实体类中必须有getter和setter⽅法,然后在spring的⼯⼚中就可以使⽤property标签进⾏设值注⼊。
springCloudfeign使⽤优化总结基于springCloud Dalston.SR3版本1.当接⼝参数是多个的时候需要指定@RequestParam 中的value来明确⼀下。
/*** ⽤户互扫* @param uid 被扫⼈ID* @param userId 当前⽤户ID* @return*/@PostMapping(REQ_URL_PRE + "/qrCodeReturnUser")UserQrCode qrCodeReturnUser(@RequestParam("uid") String uid,@RequestParam("userId") Integer userId);2.接⼝参数为对象的时候需要使⽤@RequestBody注解并采⽤POST⽅式。
3.如果接⼝是简单的数组/列表参数这⾥需要使⽤Get请求才⾏@GetMapping(REQ_URL_PRE + "/getUserLevels")Map<Integer, UserLevel> getUserLevels(@RequestParam("userIds") List<Integer> userIds);4.直接可以在@FeignClient中配置降级处理⽅式对于⼀些不重要的业务⾃定义处理很有帮助@FeignClient(value = "cloud-user", fallback = ersFallback.class)5.feign默认只有HystrixBadRequestException异常不会⾛熔断,其它任何异常都会进⼊熔断,需要重新实现⼀下ErrorDecoder包装业务异常⽰例:https:///peachyy/feign-support6. feign HTTP请求⽅式选择feign默认使⽤的是基于JDK提供的URLConnection调⽤HTTP接⼝,不具备连接池。
SpringSPI机制总结1、概念:SPI(Service Provider Interface)服务提供接⼝,简单来说就是⽤来解耦,实现插件的⾃由插拔,具体实现⽅案可参考JDK⾥的ServiceLoader(加载classpath下所有META-INF/services/⽬录下的对应给定接⼝包路径的⽂件,然后通过反射实例化配置的所有实现类,以此将接⼝定义和逻辑实现分离)Spring在3.0.x的时候就已经引⼊了spring.handlers,很多博客讲Spring SPI的时候并没有提到spring.handlers,但是通过我⾃⼰的分析对⽐,其实spring.handlers也是⼀种SPI 的实现,只不过它是基于xml的,⽽且在没有boot的年代,它⼏乎是所有三⽅框架跟spring整合的必选机制。
在3.2.x⼜新引⼊了spring.factories,它的实现跟JDK的SPI就基本是相似的了。
spring.handlers和spring.factories我都把它归纳为Spring为我们提供的SPI机制,通过这两种机制,我们可以在不修改Spring源码的前提下,⾮常轻松的做到对Spring框架的扩展开发。
2、实现:2.1 先看看spring.handlers SPI在Spring⾥有个接⼝NamespaceHandlerResolver,只有⼀个默认的实现类DefaultNamespaceHandlerResolver,⽽它的作⽤就是加载classpath下可能分散在各个jar包中的META-INF/spring.handlers⽂件,resolve⽅法中关键代码如下://加载所有jar包中的META-INF/spring.handlers⽂件Properties mappings=PropertiesLoaderUtils.loadAllProperties(this.handlerMappingsLocation, this.classLoader);//把META-INF/spring.handlers中配置的namespaceUri对应实现类实例化NamespaceHandler namespaceHandler =(NamespaceHandler) BeanUtils.instantiateClass(handlerClass);DefaultNamespaceHandlerResolver.resolve()主要被⽤在BeanDefinitionParserDelegate的parseCustomElement和decorateIfRequired,所以spring.handlers SPI机制主要也是被⽤在bean的扫描和解析过程中。
springboot学习心得Spring Boot 学习心得在开发领域中,随着技术的日新月异,Spring Boot 作为一种开发框架,以其简化配置、快速开发和高效性能的特点逐渐受到广大开发者的青睐。
经过一段时间的学习和实践,我对 Spring Boot 有了深入的认识和理解,下面我将分享一些学习心得。
1. 了解 Spring BootSpring Boot 是由Spring框架衍生而来,用于简化Spring应用程序的搭建和开发过程。
它的特点是零配置,通过自动配置和约定大于配置的原则,可以快速搭建一个独立运行的、可部署的生产级应用。
学习 Spring Boot 的第一步就是要了解其核心思想和基本原理,掌握其提供的强大功能和特性。
2. 快速开发Spring Boot 提供了一系列的“Starter”依赖,可以根据不同的应用类型快速引入所需的依赖包,而无需手动配置。
这些 Starter 依赖不仅包含了常用的核心模块,还覆盖了常见的第三方组件,如数据库、消息队列等。
开发者只需要在项目中引入适当的 Starter 依赖,即可获得相应功能的自动配置。
这大大减少了开发人员的工作量,提高了开发效率。
3. 灵活可配置虽然 Spring Boot 的自动配置在大多数情况下能够满足需求,但有时也需要进行一些定制。
Spring Boot 提供了多种配置方式,开发者可以通过配置文件、注解、属性等方式对应用进行细粒度的配置。
同时,Spring Boot 还支持多个配置文件,可以根据环境不同加载不同的配置,方便在不同环境中进行部署和测试。
4. 强大的监控和管理Spring Boot 集成了各种监控和管理工具,例如 Spring Boot Actuator,它提供了对应用程序健康、度量、审计等方面的监控功能。
通过简单地引入相关依赖,即可在运行时了解应用的性能指标、请求情况等信息。
此外,Spring Boot 还提供了可视化的管理界面,方便管理者对应用进行监控和管理。
Spring资料总结目录--------------------1.什么是spring2.Spring有什么特点?3.Spring的有哪些模块?各个模块的作用?4.控制反转(IOC)和依赖注入(DI)的区别?5.BeanFacotry对象的作用(IOC容器的作用)?6.使用FileSystemXmlApplicationContext,ClassPathXmlApplicationContext加载ApplicationContext.xml文件代码?7.BeanFactory跟ApplicationContext区别?8.依赖注入的四种方式(set,构造器,接口,注解)?9.Bean组件的作用域范围(singleton,prototype,request,session,globalsession)?10.Bean组件装配方式(byName,bType,constructor,default)?11.Bean组件的生命周期?12.在Web环境中怎么加载applicationContext.xml文件(Servlet监听器)?在web如何获取应用上下文WebApplicationContext?13.Spring对DAO模块支持?有什么优点?14.Spring的DAO模板增删查改数据代码?15.Spring对ORM模块的支持?有什么优点?16.Spring整合Hibernate模块的增删查改数据代码?17.Spring整合Ibatis模块的增删查改数据代码?18.Spring整合Mybatis模块的增删查改数据代码?19.Spring的全局事务(JTA)和局部事务(JDBC)的区别?20.Spring事务实现的方式有哪些,优缺点?21.编程式事务的特点?声明式事务的特点?22.事务7大传播属性?指定事务策略的格式代码?23.在Spring中事务管理器的实现方式有哪些?24.在Spring中事务管理器的实现方式有哪些?25.AOP的概念(切面,连接点,通知[顾问],切入点,[引入,关注点],目标对象,代理对象,织入目标)26.AOP在Spring中的作用?27.AOP中的通知有哪些?各有什么特点(前置型,后置型,环绕型,最终型,异常);28.AOP的特点和优缺点?29.AOP三种代理方式(动态代理,CGLIB代理,代理工厂bean)30.Execution配置的通用切入点的示例?31.在项目组,你们是如何使用AOP的?32.说说你对IOC的理解33.如何在Spring中使用JNDI的数据源?34.Spring如何整合Struts1.x?35.Spring如何整合Struts2.x?36.Spring如何整合Hibernate?37.Spring如何整合IBatis?38.Spring如何整合MyBatis?39.Spring的JDBC跟传统的JDBC的区别?41.Spring有哪些核心类?42.SpringMVC的工作机制?43.Hibernate中update和saveOrUpdate的区别?44.SpringMVC有哪些核心类,作用?45.SpringMVC数据如何校验,错误信息在页面如何呈现?46.SpringMVC注解标签有哪些?47.SpringMVC的特点(优点)?48.SpringMVC有哪些控制器组件?49.SpringMVC如何处理上传文件?如何使用ajax异步请求?50.Spring在视图中的标签有哪些?51.SpringAOP的注解标签有哪些?52.Spring如何配置连接池?53.连接池DBCP,C3P0,PROXOOL三个的区别---------------------------1.什么是Spring?答:Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP aspect oriene program)的容器框架.它的主要目的是简化企业开发;Spring的设计思想是,单例模式和工厂模式;2.Spring有什么特点?答:轻量级,低侵入的设计Spring的DI机制降低了业务对象替换的复杂性Spring不依赖于web容器,独立于各种应用服务器,Write Once,Run Anywhere(一次编译到处运行)高度开放性:Spring并不完全依赖于Spring,开发者可自由选用Spring框架的部分或全部,它的架构仍然是内在稳定的3.Spring的有哪些模块?各个模块的作用?答:Spring Core:Spring的基石,提供了Spring的最主要的核心机制:控制反转和依赖注入Spring Context:提供了Spring的上下文信息,如:国际化,验证等Spring Web支持:简化了处理多部分请求Spring MVC框架支持:一个全功能的构建Web应用程序的MVC实现,MVC容纳了大量视图技术,其中包括JSP、Velocity等。
springboot学习心得SpringBoot 学习心得在完成对 SpringBoot 的学习之后,我深刻体会到了这个框架的强大和便利之处。
SpringBoot 是一个基于 Spring 框架的快速开发框架,通过自动配置和简化的约定,大大提高了开发效率。
下面是我对于 SpringBoot 学习的一些心得和总结。
一、简洁高效的开发体验使用 SpringBoot 可以极大地简化项目的配置和搭建过程。
通过使用 SpringBoot Starter 依赖,我们可以轻松地引入各种常用的依赖,而无需手动去配置。
同时,SpringBoot 的自动配置机制可以根据项目中引入的依赖,自动为我们配置相关的组件和功能。
这使得我们可以将更多的精力放在业务逻辑的实现上,而不需要过多关注繁琐的配置工作。
二、内嵌 Tomcat 使得部署更加方便SpringBoot 默认内嵌了 Tomcat 容器,这意味着我们可以将项目打包成一个独立的可运行的 JAR 文件,并直接通过命令行启动应用。
这种方式不仅方便了项目的部署,还减少了对外部服务器的依赖。
另外,SpringBoot 还支持通过 WAR 包的方式部署到外部容器中,这样可以更好地与传统的应用服务器集成。
三、强大的功能扩展能力SpringBoot 提供了大量的插件和扩展点,可以帮助开发者定制化自己的应用。
比如,我们可以通过自定义 Starter 来封装一些通用的组件和功能,方便之后的重复使用。
或者通过自定义 Starter 来封装一些通用的组件和功能,方便之后的重复使用。
或者通过自定义条件注解和条件类来实现一些特定环境下的自动配置。
这些功能扩展能力让我们在开发过程中能够更加灵活地满足自己的需求。
四、完善的监控和运维支持在生产环境中,监控和运维是非常重要的一环。
SpringBoot 提供了丰富的监控和运维支持,可以帮助我们更好地监控应用的运行状态和性能指标。
比如,我们可以通过 Actuator 模块来暴露应用的健康状态、运行信息和性能指标,方便运维人员进行监控和故障排查。
spring的用法总结大全Spring是一个开源的Java开发框架,可以用于构建企业级应用程序。
它提供了一系列的模块,如Spring Core、Spring MVC、Spring Security等,每个模块都有不同的用法。
以下是Spring的用法总结大全:1. Spring IOC(控制反转):Spring的核心功能之一。
IOC容器负责创建和管理应用程序中的对象。
通过配置文件或注解,对象之间的依赖关系由容器来管理。
常见的用法有使用XML配置文件和使用注解配置。
2. Spring AOP(面向切面编程):通过AOP,可以将横切关注点(如事务管理、日志记录等)与业务逻辑分离,提高代码的可维护性和灵活性。
常见的用法有使用XML配置文件和使用注解配置。
3. Spring MVC(模型-视图-控制器):用于构建Web应用程序的框架。
通过MVC模式将应用程序分为模型、视图和控制器三层,提供了处理HTTP请求和响应的功能。
常见的用法有使用XML配置文件和使用注解配置。
4. Spring Boot:用于快速构建基于Spring的应用程序的框架。
它提供了自动配置和约定优于配置的特性,使开发者能够更快速地搭建和部署应用程序。
5. Spring Security:用于身份验证和授权的框架。
它提供了一系列的安全特性,如用户认证、授权、密码加密等。
6. Spring Data:用于简化数据库访问的框架。
它提供了一系列的模块,如SpringData JPA、Spring Data JDBC等,使开发者能够更方便地进行数据库操作。
7. Spring WebSocket:用于实现WebSocket通信的框架。
它提供了基于事件的异步消息传递功能,使开发者能够更方便地实现实时通信。
8. Spring Cloud:用于构建分布式系统的框架。
它提供了一系列的模块,如服务注册与发现、负载均衡、断路器等,使开发者能够更方便地构建和管理分布式应用程序。
最近工作用到spring+axis,现在抽空整理一下,由于实际工作中仍有细节没有弄清楚,在此只总结一下一般流程,分享给大家,希望对你有帮助,如果能解答我的疑惑还望指教。
在网上查了很多资料,大多数是使用Myeclipse,出于个人喜好,我使用的IDE是Eclipse+tomcat6.0。
步骤1:在Eclipse中建立一个web项目,这里起名叫AxisTest,需要的jar包有:commons-discovery.jar、jaxrpc.jar、saaj.jar、wsdl4j.jar、axis.jar、commons-logging.jar、spring.jar,由于网上大多数例子都是用MyEclipse自动导入jar,所以有的文章中介绍还需要activation.jar、ant.jar,但是在项目把这两个jar包去掉,照样跑通,所以此处不明白这个两个jar有何用,有谁知道请留言给我,谢谢。
步骤2:导入jar包后,分别写如下代码:声明接口Java代码1.package com.webservice.axis.test;2.3./**4. * 声明方法接口5. */6.public interface IHelloWorld {7.8. public String getMessage(String word);9.10.}实现类Java代码1.package com.webservice.axis.test;2.3./**4. * 实现接口的类,Ioc的依赖注入可以在此处自由发挥5. */6.public class HelloWorldImpl implements IHelloWorld {7.8. private String helloStr; // Spring 中需要注入的字符串9.10. public String getHelloStr() {11. return helloStr;12. }13.14. public void setHelloStr(String helloStr) {15. this.helloStr = helloStr;16. }17.18. // 实现接口中的方法19. @Override20. public String getMessage(String name) {21. return helloStr + ":" + name;22. }23.24.}下面一个类,感觉上像是spring和axis的结合点,用来将类发布成webService,但有些地方值得说一下。
Spring1:Spring下载地址Spring jar包:http://projects.spring.io/spring-framework/http://repo.spring.io/release/org/springframework/spring/Eclipse插件:http://spring.io/tools/sts/all2:Spring bean配置代码方式:1.导入jar包2.配置Springconfig文件(通过反转控制bean)3.获取:getBean();Xml定义bean:<bean id="spring"class="com.spring.beans.Beans"> <property name="name"value="春"></property> </bean>获取bean:ClassPathXmlApplicationContext paths=new ClassPathXmlApplicationContext("spring.xml");Beansbean=(Beans)paths.getBean("spring");bean.toSpring();概念方式:1.在项目中添加Spring核心jar包2.配置bean文件3.通过ClassPathxmlApplication 获取配置1.创建IOC对象2.从IOC中获取bean实例3.特殊符号的时候,我们需要用在value里面用的<![CDATE[里面可以写任何符号和字母]]>3:研究Bean1:通过set方法注入值:<property name="name" value="Spring"></property>2.通过构造器注入值<Constructor-arg></Constructor>例如<constructor-arg index="0" value="1"></constructor-arg> 属性:value:值index:索引type:类型4.set和构造器注意事项:1.set注入不能有构造方法2.构造器注入必须指定构造方法5.特殊符号转义:<![CDATA[“被转义的字符”]]>例如<constructor-arg index="1"><value><![CDATA["<kong>"]]></value></constructor-arg6.Bean的配置方法:<bean value=””></bean><bean ><value></value></bean>7.Bean的作用域:▶init-method属性:用于指定当前Bean的初始化方法,在Bean实例创建好后,首先会调用其指定名称的方法▶destory-method属性:用于指定当前Bean的销毁方法,在Bean即将被销毁之前会自动调用该属性指定的方法ClassPathXmlApplicationContext.close()方法销毁beanLazy-init=”true”: 可以手动控制单例模式下是否实例化(默认:default)beans:default-lazy-init全局设置8.P标签简化Bean:在XML文件头部添加xmlns:p="/schema/p"即可使用。
使用P:导入jar包spring-expression-4.3.10.RELEASE.jar9.Bean集合:<props>java.util.Properties<list>元素对应于java.util.ArrayList.<map>元素用来注入java.util.Map元素。
9.Bean别名:<alias name="bean" alias="toName"/>同一个bean 在不同的使用空间中(其两个名字,语意话) name:对应bean id alias:别名10.内部Bean<bean><pro><bean><bean>内部bean:1.不能被外界所调用2.IOC容器启动不会实例化11.R ef属性引入外bean12.抽象bean +继承1.子类通过parent属性得到父类beanid2.父bean可以作为配置模板abstract =true抽象bean 不能实例化,只能被继承3.抽象bean可以没有class4.ApplicationContext 不会加载抽象bean12.SpEL<property>元素的value属性中使用#{}使用静态属性 #{T(ng.Math).random()}也可以调用自定义方法!13.Bean注解1.context:component-scan 属性指定一个需要扫描的包2.@Component 基本注解@Repository 表示持久层@Service 服务层@Controller 表现层bean引用名字第一个字母小写,可以自定义bean的名称<context:include-filter>允许扫描org.springframework.stereotype.Controller<context:exclude-filter>不允许扫描14.autowire属性byName值:表示通过id名称来自动匹配;byType值:表示通过class指定的类型来自动装配;15.autowire注解如果类型重复,可以配合Qualifier这个注解来完成@Autowired@Qualifier("userimpl")3:Aop1.通过注解方式实现Aop步骤1.导入jar包aspectjweaver-1.7.12.设置切入点@Aspect3.启用注解配置<aop:aspectj-autoproxy></aop:aspectj-autoproxy>4.增强通知:–@Before: 前置通知, 在方法执行之前执行–@After: 后置通知, 在方法执行之后执行–@AfterRunning:返回通知, 在方法返回结果之后执行–@AfterThrowing:异常通知, 在方法抛出异常之后–@Around: 环绕通知, 围绕着方法执行2.切入点表达式切入点表达式 execution(* com.service.impl..*.*(..))1、execution(): 表达式主体。
2、第一个*号:表示返回类型,*号表示所有的类型。
3、包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.service.impl包、子孙包下所有类的方法。
4、第二个*号:表示类名,*号表示所有的类。
5、*(..):最后这个星号表示方法名,3.pointcut通用定义1.@pointcut(“execution()”)Public void put(){}//签名方法@Before(“签名方法()” ) //调用3.aop执行级别(顺序)4.@Order(“number”)级别越小,越先执行………5.JoinPoint对象joion.getSignature().getName() 获取方法名getArgs();获取参数(返回数组类型)@Pointcut("execution(public int com.test.been.Means.test1(..))") public void find(){}@Before("find()")public void test2(JoinPoint jPoint){Object[] lis=jPoint.getArgs();System.out.println("前"+lis[0]);}6.ProceedingJoinPoint对象用在环绕通知里面://环绕通知@Around("find()")public Object around(ProceedingJoinPoint join){Object res=0;System.out.println("前置通知");try {res=join.proceed();} catch (Throwable e) {e.printStackTrace();System.out.println("异常通知");}System.out.println("返回通知........."+res);System.out.println("后置通知.........");return res;}pjd.proceed(); 让方法继续执行7.增强通知:–@Before–@After:----------------------------------都携带JoinPoint对象–@AfterRunning:------------------------------JoinPoint对象(value="cuts()",returning="retus")–@AfterThrowing:------------------------------JoinPoint对象(value="cuts()",throwing="ex")–@Around:1.必须有返回值2.携带ProceedingJoinPoint对象3.如何获取返回值join.proceed();不能返回Null4. Throwable如果出现异常获取不到执行函数返回值8.通过xml形式配置Aop注意:不能使用<aop:aspectj-autoproxy></aop:aspectj-autoproxy><bean id="aops" class="com.spring.aop.Aops"></bean>:指定bean方法<aop:config>Pointcut:定义切点<aop:pointcut expression="execution(* com.spring.*.*.*(..))" id="aoppointcut"/><aop:aspect id="aopaspect" ref="aops" order="8"><aop:before method="Befores" pointcut-ref="aoppointcut" /><aop:after method="afters" pointcut-ref="aoppointcut"/><aop:after-returning method="aftersruning" pointcut-ref="aoppointcut"returning="returns"/><aop:after-throwing method="throwing" pointcut-ref="aoppointcut" throwing="ex"/> <aop:around method="around" pointcut-ref="aoppointcut"/></aop:aspect>P:属性P:属性-ref 指向bean<!-- Alias:bean别名 --><alias name="springtwo" alias="kxz" /><bean id="springOne" class="com.test.myspring.Test"></bean><bean id="springtwo" class="com.test.been.Geade"><property name="geId" value="2"></property><property name="geName" value="Helle"></property><!-- 创建了一个注入的java.util.Properties元素 --><property name="p"><props><prop key="number">12</prop><prop key="pass">kong</prop><prop key="love">篮球</prop><prop key="sex">男</prop></props></property><!-- 元素对应于java.util.ArrayList 或者是java.util.List --><property name="list"><list><value>第一</value><value>第二</value><value>第仨2</value><value>第五是</value></list></property><!-- 元素用来注入java.util.Map元素。