Spring AOP 学习小结
springboot学习心得
springboot学习心得SpringBoot是一个Java后端开发框架,它的出现极大地简化了项目的搭建和配置。
我在学习过程中,深刻体会到了SpringBoot的优势和便利性。
一、SpringBoot的特点SpringBoot具有以下几个显著特点:1. 简化的配置:SpringBoot采用约定大于配置的原则,减少了繁琐的配置,大部分情况下,你只需要一些简单的配置就可以运行一个站点或者服务。
2. 内嵌式Servlet容器:SpringBoot使用内嵌式Servlet容器(如Tomcat、Jetty等),使得运行Web应用变得更加简单,开发人员无需手动部署外部的Servlet容器。
3. 自动化配置:SpringBoot会根据项目中使用的依赖自动进行配置,无需手动配置。
当然,你也可以根据自己的需求进行定制化配置。
4. 准生产级别的监控:SpringBoot集成了大量的监控工具和健康检查机制,可以方便地监控应用的运行状态和健康情况。
二、学习过程中的收获在学习SpringBoot的过程中,我深刻体会到了以下几个方面的收获:1. 快速上手:相较于传统的Spring框架,SpringBoot的上手难度明显降低。
通过简单的配置和约定,可以快速搭建一个基本功能的应用程序。
2. 开发效率提升:SpringBoot的自动化配置使得开发过程更加高效。
通过减少繁琐的配置和重复的代码,开发人员可以更专注于业务逻辑的实现。
3. 生态丰富:SpringBoot与众多Spring家族的库和工具相互配合,拥有庞大的生态系统。
这使得我们可以很方便地集成各种功能和组件,如数据库访问、消息队列、缓存等。
4. 可维护性提升:SpringBoot的规范化配置和约定使得代码更加易读易维护。
项目的结构清晰,配置文件统一,便于团队协作和后续代码维护。
三、未来的学习计划在学习SpringBoot过程中,我发现了自己的不足和需要继续提升的地方。
因此,我在未来的学习计划中将重点提升以下几个方面:1. 深入学习SpringBoot的原理和内部机制,了解其背后的设计理念和实现方式。
spring知识点总结
spring知识点总结Spring是一个开发应用程序的Java企业应用程序框架,它以依赖注入(DI)和面向切面(AOP)为基础,可以帮助开发者开发出模块化、可重用、可扩展、可测试的应用程序。
Spring可以用来构建Web应用程序、基于REST的服务、批处理应用程序以及各种不同类型的企业级应用程序。
下面是关于Spring的一些重要知识点总结:1. 控制反转(Inversion of Control,简称IoC):Spring的核心特性之一,通过IoC容器将对象的创建和依赖注入交给框架来管理,减少了代码的耦合度和管理对象的复杂性。
2. 依赖注入(Dependency Injection,简称DI):是IoC的一种实现方式,通过注解或配置文件将对象的依赖关系注入到对象中,使得对象在创建时不需要自己构造依赖的对象。
3. AOP(Aspect-Oriented Programming):面向切面编程,通过将横切关注点(如日志记录、安全性检查等)模块化,便于代码的维护和管理。
4. Spring MVC:用于构建Web应用程序的模块,提供了一种基于注解的方式来处理用户请求和生成响应,支持RESTful风格的开发。
5. 事务管理:Spring提供了对事务的支持,可以通过注解或配置文件的方式管理数据库事务,保证数据一致性和完整性。
6. 数据访问支持:Spring可以与各种数据访问技术(如JDBC、Hibernate、MyBatis等)无缝集成,简化了数据库操作的开发过程。
7. Spring Boot:Spring框架的一个子项目,用于简化Spring应用程序的配置和部署,提供了自动配置、嵌入式服务器等特性,使得开发者可以快速搭建一个可运行的Spring应用程序。
8. Spring Security:用于开发安全性强的应用程序,提供用户认证、授权、身份验证等功能。
9. Spring Cloud:基于Spring Boot开发的微服务框架,提供了服务发现、负载均衡、熔断器、配置管理等功能,帮助开发者构建分布式系统。
基于SpringAOPproxyTargetClass的行为表现总结
基于SpringAOPproxyTargetClass的⾏为表现总结Spring AOP proxyTargetClass的⾏为要点列表形式proxyTargetClasstrue⽬标对象实现了接⼝ – 使⽤CGLIB代理机制⽬标对象没有接⼝(只有实现类) – 使⽤CGLIB代理机制false⽬标对象实现了接⼝ – 使⽤JDK动态代理机制(代理所有实现了的接⼝)⽬标对象没有接⼝(只有实现类) – 使⽤CGLIB代理机制表格形式proxyTargetClass⽬标对象特征代理效果true⽬标对象实现了接⼝使⽤CGLIB代理机制true⽬标对象没有接⼝(只有实现类)使⽤CGLIB代理机制false⽬标对象实现了接⼝使⽤JDK动态代理机制(代理所有实现了的接⼝)false⽬标对象没有接⼝(只有实现类)使⽤CGLIB代理机制proxy-target-class="true" 与proxy-target-class="false"的区别<tx:annotation-driven transaction-manager="transactionManager"proxy-target-class="true"/>注意:proxy-target-class属性值决定是基于接⼝的还是基于类的代理被创建。
如果proxy-target-class 属性值被设置为true,那么基于类的代理将起作⽤(这时需要cglib库)。
如果proxy-target-class 属值被设置为false或者这个属性被省略,那么标准的JDK 基于接⼝的代理将起作⽤。
即使你未声明 proxy-target-class="true" ,但运⾏类没有继承接⼝,spring也会⾃动使⽤CGLIB代理。
⾼版本spring⾃动根据运⾏类选择 JDK 或 CGLIB 代理以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
java aop面试题
java aop面试题面试题一:什么是AOP?它在Java中起到什么作用?AOP(Aspect-Oriented Programming)即面向切面编程,它是一种编程范式,用于解决在面向对象编程中,难以避免的交叉切关注点(Cross-Cutting Concerns)的问题。
交叉关注点是在应用程序开发过程中,不属于一个特定方法或类,但会影响到多个方法或类的共性问题,例如日志记录、异常处理、事务管理等。
AOP通过将关注点从核心业务模块中解耦出来,将其称之为切面(Aspect),然后通过横向抽取,在不修改原有业务逻辑的情况下,将切面独立插入进去,从而达到对关注点的集中管理和复用。
AOP可以提高系统的可维护性、可扩展性和代码的复用性。
面试题二:请说明AOP的主要概念和术语。
1. 切面(Aspect):封装横切关注点的模块。
2. 连接点(Join Point):在程序执行过程中能够插入切面的特定点,例如方法的执行、异常的抛出等。
3. 切点(Pointcut):用于定义连接点的表达式,以便切面可以根据切点的匹配来决定在何处插入切面逻辑。
4. 通知(Advice):切面在连接点处执行的特定动作,包括“前置通知”、“后置通知”、“异常通知”、“环绕通知”和“最终通知”等。
5. 引入(Introduction):在不修改原有类的情况下,为类添加新的方法或属性。
6. 织入(Weaving):将切面应用到目标对象并创建新的代理对象的过程。
面试题三:请解释Spring中的AOP是如何实现的?在Spring中,AOP的实现主要依赖于代理模式和动态代理技术。
1. JDK动态代理:基于接口的动态代理,通过接口生成代理对象,所创建的代理对象与目标对象实现了相同的接口,并将方法的调用转发到目标对象上。
2. CGLIB动态代理:基于类的动态代理,通过生成目标对象的子类来作为代理对象,并覆盖相应方法实现代理逻辑。
3. Spring AOP使用了ProxyFactoryBean,它是一个Bean工厂,负责创建和管理代理对象。
java框架实训总结与体会
java框架实训总结与体会
在进行Java框架实训后,我深刻体会到了框架的重要性和实际应用价值。
首先,通过实训我更加深入地理解了Spring、Spring MVC和MyBatis等框架的原理和使用方法。
这些框架为Java开发提供了丰富的工具和功能,能够大大提高开发效率和代码质量。
在实训中,我学会了如何使用Spring框架进行依赖注入和AOP编程,以及如何利用Spring MVC构建Web应用程序。
同时,通过MyBatis框架,我学会了如何简化数据库访问的过程,提高了数据持久层的开发效率。
其次,实训让我深刻认识到了框架的设计思想和模式对项目开发的重要性。
框架提倡的约定大于配置的理念,使得项目开发更加规范和高效。
同时,框架提供的模块化设计和可扩展性,使得项目具有更好的可维护性和可扩展性。
在实训中,我意识到了良好的框架设计能够极大地减少重复性工作,提高了代码的复用性和可维护性。
最后,通过实训我还深刻体会到了团队合作的重要性。
在实训过程中,我和同学们共同学习、讨论和解决问题,相互协作完成了项目任务。
这让我认识到了团队合作对于项目成功的关键性作用,
同时也提高了我的沟通和协作能力。
总的来说,Java框架实训让我受益匪浅,不仅提高了我的技术水平,也增强了我对团队合作和项目开发的认识。
我深信框架的应用将会在我的未来项目开发中发挥重要作用,提高项目的质量和效率。
SpringAOP示例与实现原理总结——传统springaop、基于切面注入、基于@Asp。。。
SpringAOP⽰例与实现原理总结——传统springaop、基于切⾯注⼊、基于@Asp。
⼀、代码实践1)经典的Spring Aop经典的spring aop,是基于动态代理技术的。
实现⽅式上,最常⽤的是实现MethodInterceptor接⼝来提供环绕通知,创建若⼲代理,然后使⽤ProxyBeanFactory配置⼯⼚bean,⽣成拦截器链,完成拦截。
⽰例如下:1package demo.spring;23import org.aopalliance.intercept.MethodInterceptor;4import org.aopalliance.intercept.MethodInvocation;5import org.junit.Test;6import org.junit.runner.RunWith;7import org.springframework.beans.factory.annotation.Autowired;8import org.springframework.test.context.ContextConfiguration;9import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;1011 @RunWith(SpringJUnit4ClassRunner.class)12 @ContextConfiguration("classpath:spring-config.xml")13public class TraditionalSpringAopDemo {14 @Autowired15private Service proxy;1617 @Test18public void test() {19 proxy.execute("hello world!");20 }21 }2223interface Service {24void execute(String str);25 }2627class ServiceImpl implements Service {28 @Override29public void execute(String str) {30 System.out.println("execute invoke: " + str);31 }32 }3334class Interceptor1 implements MethodInterceptor {35 @Override36public Object invoke(MethodInvocation methodInvocation) throws Throwable {37 System.out.println("interceptor1,before invoke");38 Object ret = methodInvocation.proceed();39 System.out.println("interceptor1,after invoke");40return ret;41 }42 }4344class Interceptor2 implements MethodInterceptor {45 @Override46public Object invoke(MethodInvocation methodInvocation) throws Throwable {47 System.out.println("interceptor2,before invoke");48 Object ret = methodInvocation.proceed();49 System.out.println("interceptor2,after invoke");50return ret;51 }52 }xml⽂件配置:1<?xml version="1.0" encoding="UTF-8"?>2<beans xmlns="/schema/beans"3 xmlns:xsi="/2001/XMLSchema-instance"4 xmlns:context="/schema/context"5 xmlns:aop="/schema/aop"6 xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd /schema/context /schema/context/sprin 78<context:component-scan base-package="demo.spring"/>910<bean class="demo.spring.ServiceImpl" id="service"></bean>11<bean class="demo.spring.Interceptor1" id="interceptor1"></bean>12<bean class="demo.spring.Interceptor2" id="interceptor2"></bean>13<bean class="org.springframework.aop.framework.ProxyFactoryBean" id="proxy">14<property name="target" ref="service"/>15<property name="interceptorNames">16<list>17<value>interceptor1</value>18<value>interceptor2</value>19</list>20</property>21</bean>22</beans>结果:interceptor1,before invokeinterceptor2,before invokeexecute invoke: hello world!interceptor2,after invokeinterceptor1,after invoke可以看到拦截链的执⾏过程与拦截器顺序的关系。
【Spring-AOP-学习笔记-5】@AfterReturning增强处理简单示例
【Spring-AOP-学习笔记-5】@AfterReturning增强处理简单⽰例项⽬结构业务代码@Component("hello")public class HelloImpl implements Hello{// 定义⼀个简单⽅法,模拟应⽤中的业务逻辑⽅法public void foo(){System.out.println("执⾏Hello组件的foo()⽅法");}// 定义⼀个addUser()⽅法,模拟应⽤中的添加⽤户的⽅法public int addUser(String name , String pass){System.out.println("执⾏Hello组件的addUser添加⽤户:" + name);return 20;}}@Component("world")public class WorldImpl implements World{// 定义⼀个简单⽅法,模拟应⽤中的业务逻辑⽅法public void bar(){System.out.println("执⾏World组件的bar()⽅法");}}定义切⾯Bean@Aspectpublic class LogAspect{// 匹配org.crazyit.app.service.impl包下所有类的、// 所有⽅法的执⾏作为切⼊点@AfterReturning(returning="rvt", pointcut="execution(* org.crazyit.app.service.impl.*.*(..))")// 声明rvt时指定的类型会限制⽬标⽅法必须返回指定类型的值或没有返回值// 此处将rvt的类型声明为Object,意味着对⽬标⽅法的返回值不加限制public void log(Object rvt){System.out.println("获取⽬标⽅法返回值:" + rvt);System.out.println("模拟记录⽇志功能...");}}说明:returing属性所指定的形参名必须对应增强处理中的⼀个形参名,当⽬标⽅法执⾏返回后,返回值作为相应的参数值传⼊增强处理⽅法中。
springboot学习心得
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技术内幕——深入解析Spring架构与设计原理(二)AOP
Spring技术内幕——深入解析Spring架构与设计原理(二)AOPAOP联盟定义的AOP体系结构把与AOP相关的概念大致分为了由高到低、从用法到实现的三个层次。
关于这个体系结构,个人的理解是这样的,从上往下,最高层是语言和开发环境,在这个环境中可以看到几个重要的概念:base可以视为待增加对象,或者说目标对象;aspect指切面,通常包含对于base的增加应用;configuration可以看成是一种编织或者说配置,通过在AOP体系中提供这个configuration配置环境,可以把base和aspect结合起来,从而完成切面向目标对象的编织实现。
对Spring平台或者说生态系统来说,AOP是Spring框架的核心功能模块之一。
AOP与IOC容器的结合用法, 为应用开发或者Spring自身功能的扩展都提供了许多方便。
Spring AOP的实现和其他特性的实现一样,十分丰盛,除了可以用法Spring本身提供的AOP实现之外,还封装了业界优秀的AOP解决计划AspectJ来让应用用法。
在这里,主要对Spring自身的AOP实现原理做一些解析;在这个AOP实现中,Spring 充分利用了IOC容器Proxy代理对象以及AOP拦截器的功能特性,通过这些对AOP基本功能的封装机制,为用户提供了AOP的实现框架。
所以,要了解这些AOP的基本实现,需要我们对Java 的Proxy机制有一些基本了解。
AOP实现的基本线索 AOP实现中,可以看到三个主要的步骤,一个是代理对象的生成,然后是拦截器的作用,然后是Aspect编织的实现。
AOP框架的丰盛,很大程度体现在这三个详细实现中,所具有的丰盛的技术挑选,以及如何实现与IOC容器的无缝结合。
究竟这也是一个十分核心的模块,需要满足不同的应用需求带来的解决计划需求。
在Spring AOP的实现原理中,我们主要举ProxyFactoryBean的实现作为例子和实现的基本线索举行分析;很大一个缘由,是由于ProxyFactoryBean是在Spring IoC环境中,创建AOP应用的最底层办法,从中,可以看到一条实现AOP的基本线索。
springboot学习心得
springboot学习心得SpringBoot 学习心得在完成对 SpringBoot 的学习之后,我深刻体会到了这个框架的强大和便利之处。
SpringBoot 是一个基于 Spring 框架的快速开发框架,通过自动配置和简化的约定,大大提高了开发效率。
下面是我对于 SpringBoot 学习的一些心得和总结。
一、简洁高效的开发体验使用 SpringBoot 可以极大地简化项目的配置和搭建过程。
通过使用 SpringBoot Starter 依赖,我们可以轻松地引入各种常用的依赖,而无需手动去配置。
同时,SpringBoot 的自动配置机制可以根据项目中引入的依赖,自动为我们配置相关的组件和功能。
这使得我们可以将更多的精力放在业务逻辑的实现上,而不需要过多关注繁琐的配置工作。
二、内嵌 Tomcat 使得部署更加方便SpringBoot 默认内嵌了 Tomcat 容器,这意味着我们可以将项目打包成一个独立的可运行的 JAR 文件,并直接通过命令行启动应用。
这种方式不仅方便了项目的部署,还减少了对外部服务器的依赖。
另外,SpringBoot 还支持通过 WAR 包的方式部署到外部容器中,这样可以更好地与传统的应用服务器集成。
三、强大的功能扩展能力SpringBoot 提供了大量的插件和扩展点,可以帮助开发者定制化自己的应用。
比如,我们可以通过自定义 Starter 来封装一些通用的组件和功能,方便之后的重复使用。
或者通过自定义 Starter 来封装一些通用的组件和功能,方便之后的重复使用。
或者通过自定义条件注解和条件类来实现一些特定环境下的自动配置。
这些功能扩展能力让我们在开发过程中能够更加灵活地满足自己的需求。
四、完善的监控和运维支持在生产环境中,监控和运维是非常重要的一环。
SpringBoot 提供了丰富的监控和运维支持,可以帮助我们更好地监控应用的运行状态和性能指标。
比如,我们可以通过 Actuator 模块来暴露应用的健康状态、运行信息和性能指标,方便运维人员进行监控和故障排查。
SpringCloud学习心得
SpringCloud学习⼼得SpringCloud初衷最近公司的⽼项⽬基本维护稳定了,规划⼀个资讯项⽬,我打算⽤众望所归的cloud提升下技术b格,之前只会⽤boot,做技术的就要⼀直保持学习,不吃⽼本,开始学习cloud。
写篇博客记录下。
介绍SpringCloud为开发⼈员提供了快速构建分布式系统的常⽤⼯具,包括配置管理、服务发现、服务熔断、智能路由、总线、鉴权等。
SpringCloud基于SpringBoot实现微服务架构,它是Java项⽬从单体应⽤架构向微服务架构变迁的主流选择之⼀。
特性(1) 分布式/版本化配置(2) 服务注册和发现(3) 路由(4) service - to - service 调⽤(5) 负载均衡(6) 断路器(7) 分布式消息传递打⽐⽅单体应⽤:个⼈开发者微服务:开发公司主要组件(1)服务注册、发现 Eureka -- 公司通讯录(2)微服务应⽤ -- ⼩组成员(3)断路器Hystrix--员⼯绩效考核制度(4)断路器监控Hystrix Dashboard和Turbine--员⼯绩效考核表(5)客户端负载均衡器Ribbon--⼩组组长的⼯作安排机制(6)路由/⽹关Zuul--项⽬经理的⼯作安排机制(7)统⼀配置Config--管理部的开发规范(8)链路追踪Sleuth--⼯作进度统计CAP定理 (⼀致性、可⽤性、分区容错性)zk CP (追求强⼀致性)eureka AP(强可⽤性)eureka 服务治理(服务注册、发现)(1) 接下来重点讲⼀下 eureka服务端,要声明⾃⼰是eureka 的服务端,在启动类注解yml配置: client: register-with-eureka: false (为别⼈提供注册服务的,⾃⼰不需要) fetch-registry: false (不需要同步别⼈的服务) service-url: (⽐如是⼀个map,可以查看源码) default-zone : http://${}:${}/eureka/ (如果不配置默认加载8761的 eureka)region(⼤区) zone(具体的⼩区)(2) 如何去注册:⽐如说hello-service ,要声明⾃⼰是eureka 的客户端,在启动类注解yml配置: server.port : 8081 =hello eureka.client.service-url.defaultZone=http://${}:${}/eureka/ (去哪⾥注册,就是上⾯所说的服务端) 同理,可以注册多个 eureka 的客户端的服务。
Java实习总结(通用20篇)
Java实习总结(通用20篇)Java实习总结 1本人工作认真、细心,责任心和进取精神强,勤恳、不知疲倦,对工作有极大的热情;性格开朗,乐于与人交流,良好熟练的沟通能力,较强的团队合作能力;责任心强,完成领导交办的工作,与公司同事配合默契,相处融洽,配合各部门负责人圆满完成各项工作;积极学习新的知识和技能,注重自我发展和进步。
在这个部门的工作中,我很努力,赢得了这个部门领导和同事的认可。
当然工作中也有一些小错误小问题,部门领导及时给我指出来,促进了我工作的成熟。
如果我们只是从最初几天的介绍中了解公司,对公司的了解也只是表面的,那么随着时间的推移,我对公司的了解也更深了。
轻松和谐的工作氛围和公司团结向上的企业文化让我很快进入了工作角色。
这就像一辆新车跑了进来。
一个好的司机会缩短新车的磨合期,对新车有很好的保护,使其发挥出最佳性能。
我们公司是优秀的司机,新员工是需要过磨合期的新车。
在公司的领导下,我会对自己更加严格,在做好本职工作的同时,积极团结同事,改善同事之间的关系。
在工作中要不断的学习积累,不断的'提出问题,解决问题,不断的提升自己,才能更快更好的完成工作。
我相信我会做好工作,成为闻天知地的优秀人才中的一员,不辜负领导的期望。
总之,在这一个月的工作中,我深深地体会到,拥有一个和谐向上的团队是非常重要的,拥有一个积极向上、波澜壮阔的公司和领导是员工前进的动力。
公司给了我这样一个发挥的舞台,我会珍惜这个机会,为公司的发展尽自己最大的努力。
Java实习总结 2转眼间,来到公司接近一个月了,从校园里走到实习岗位,学习环境变了,与周围的人的关系变了,一开始最重要的就是做好角色的转变,融入到环境中。
从学校学生到公司员工是一次非常重要的角色转变,同时也是一次人生的跨越。
对于大学生来讲,这不是一道不可逾越的障碍,实习的机会也将是我未来职业生涯助力的跳板。
在实习的适应阶段,我最重要的转变就是态度的变换,我自己也体会到态度决定着一切。
spring5实验报告心得体会
spring5实验报告心得体会
spring5实验完成后我了解到了以下几点:
Spring 能帮我们低侵入/低耦合地根据配置文件创建及组装对象之间的依赖关系。
Spring 能帮助我们无耦合的实现日志记录,性能统计,安全控制等。
Spring 能非常简单的且强大的声明式事务管理(通过配置完成事务,不用修改代码)。
Spring 提供了与第三方数据访问框架(如Hibernate、JPA),且自己也提供了一套来方便数据库访问。
Spring 提供与第三方 Web(如Struts1/2、JSF)框架无缝集成,且自己也提供了一套Spring MVC 框架,来方便Web 层搭建。
Spring 能方便的与如Java Mail、任务调度、缓存框架等技术整合,降低开发难度
Spring是轻量级的开源的JavaEE框架
Spring可以解决企业应用开发的复杂性
Spring的两个核心:IOC和AOP
IOC:控制反转,把创建对象过程交给Spring进行管理AOP:面向切面,不修改源代码进行功能增强
Spring特点:
方便解耦,简化开发
AOP编程支持
方便程序的测试
方便集成各种优秀框架
降低Java EE API使用难度
方便进行事务操作
控制反转,把对象创建和对象之间的调用过程交给Spring进行管理使用IOC目的:降低耦合度。
对aop的理解
对aop的理解AOP,全称为面向切面编程,是一种计算机编程范型和技术。
它旨在通过在程序代码的不同位置注入代码,来实现解耦和划分责任的目的。
本文将从以下五个方面来对AOP进行简要的介绍和解析。
1. AOP的概念AOP是一种程序设计思想。
它的主旨是将程序应用中的业务逻辑与系统服务分离开来,这种分离使得逻辑代码更清晰,同时使其更有层次性、可维护性和可扩展性。
通过AOP,我们可以把系统中一些通用的方面,如日志、事务、权限、缓存等,提取出来作为切面,然后在需要用到这些方面的地方,使用AOP框架进行动态织入。
2. AOP的实现原理AOP框架实现的原理是动态代理和字节码操作。
在运行时,AOP框架会在目标对象和代理对象之间插入一层拦截器(Interceptor),当某个方法被调用时,拦截器会先执行通用逻辑,再执行业务逻辑。
代理对象可以通过继承实现,也可以通过JDK动态代理(基于接口)和CGLib动态代理(基于类)技术实现。
使用AOP的主要优势是解耦和模块化。
它将通用的方面提取出来作为切面,而业务逻辑则放在目标对象中,通过动态代理实现切面与业务逻辑之间的分离。
这使得系统更易于维护,也使得系统的架构更加可扩展和可重用。
4. AOP的应用场景AOP的应用场景主要包括日志、事务、缓存、安全、权限等方面。
比如,在一个Web应用中,我们可以通过AOP来实现记录日志、处理事务、统计性能、进行权限控制等功能。
使用AOP也有一些缺点,比如增加了代码的复杂度,增加了系统全局的耦合性,增加了程序的体积和运行的时间等等问题。
但是针对这些问题,开发人员可以通过精心设计和合理划分切面来避免和引导。
在总结上述内容之后,可以看出AOP在软件开发过程中有着非常广泛的应用。
它的优点在于将程序代码进行了分层,使得程序的结构变得更加清晰、易于维护和可扩展。
但是在运用AOP时,开发人员也需要遵循它的指导思想和设计思路,以达到最佳的效果和最低的副作用。
Spring总结
Spring总结Spring总结1、spring两⼤核⼼接⼝的区别2.spring读取配置⽂件1.BeanFactoryi从src下查找配置⽂件:Resource res = new ClassPathResource("applicationContext.xml")ii.从⽂件系统中读取配置⽂件:Resource res = new FileSystemResource("applicationContext.xml")iii.web环境中读取配置⽂件Resource res = new ServletContextResource("applicationContext.xml")2.ApplicationContextApplicationContext context = null;i从src下查找配置⽂件:context = new ClassPathXmlApplicationContext ("applicationContext.xml") ii.从⽂件系统中读取配置⽂件:context = new FileSystemXmlApplicationContext ("applicationContext.xml") iii.web环境中读取配置⽂件context = new XmlWebApplicationContext ("applicationContext.xml")3.Spring :组合对象和对象之间的关系,也可以组合框架和框架之间的关系4.Spring是轻量级的ioc和aop的容器框架1)轻量级:使⽤时程序所占⽤的资源很少,⾮侵⼊性(松耦合)2)IoC(Inversion Of Control):控制反转,对象和如何得到它的协作对象的责任反转3)AOP:⾯向切⾯的编程4)容器:控制容器内对象的⽣命周期5)框架:⼀些对象通过构建提供共通性的功能,可以简化程序的开发5.Spring第⼀个项⽬1)创建java项⽬,引⼊核⼼jar包(Spring.jar)2)引⼊配置⽂件(打印⽇志log4j:log4j.properties)Spring : applicationContext.xml3)增加测试类4)BeanFactory 是核⼼接⼝,可以获取配置⽂件中声明的对象,组合对象之间的关系,可以维护对象的⽣命周期5)spring创建对象默认是单例创建的6)使⽤ApplicationContext 代替BeanFactory (推荐使⽤),可以从框架级别上提供更多的⽀持6.不通过编码⽅式设置属性1.可以在property标签中声明属性2.DI(DenpendencyInjection)依赖注⼊的三种⽅式1)接⼝注⼊(不推荐使⽤)2)set⽅法(属性)注⼊(要先有对象)3)构造⽅法注⼊3.细讲set⽅法的属性注⼊1.属性注⼊必须有set⽅法2.⼀个对象中有另⼀个对象的引⽤的情况,在配置时采⽤ref来参照另⼀个对象,ref要和另⼀个对象的id相同3.属性是数组,list集合的场合:在属性⾥⾯使⽤list标签,如果是list集合(使⽤泛型),获得的是ArrayList类型,如果集合不使⽤泛型,可以放任何类型的数据;4.属性是map集合,使⽤map标签,获得的是LinkedHashMap类型的5.属性是set集合,使⽤set标签,获得的是LinkHashSet类型的hashSet重复不放,hashMap重复覆盖6.属性是Property集合,使⽤prop标签4.继承属性注⼊将⽗类的属性注⼊关系体现在⼦类中5.构造⽅法的注⼊1.在构造⽅法类型相同的情况下,标签的声明顺序和构造⽅法的参数顺序是完全相同的,如果不顺序不同,可增加index来区分2.在构造⽅法类型不同的情况下,多个构造⽅法不明确调⽤哪个时,可以增加参数的类型,参数的顺序没要求7.Spring属性编辑器(将字符串转换为⽇期类型)1.创建编辑器类,继承PropertyEditorSupport,重写setAsText ⽅法,注⼊属性时,⾃动调⽤,在⽅法中,最后⼀定要调⽤setV alue()放到对象的属性中2.属性编辑管理器(CustomEditorConfigurer)⾃动识别⾃定义的编辑器8.Spring的⾃动装配功能Autowire⾃动装配功能对java的简单类型不⽀持简单类型包括:基本类型,字符串类型,⽇期类型1.byName:如果⾃动装配采⽤ByName,那么使⽤时,会根据对象的属性名称在Spring环境中查找相同ID的Bean对象,如果查找到,那么直接赋值给响应的属性,如果找不到,不做任何处理byName不需要考虑特殊的情况2.byType:如果⾃动装配采⽤ByType,那么使⽤时,会根据对象的属性的类型在Spring环境中查找相同类型的Bean对象,如果查找到,那么直接赋值给响应的属性,如果找不到,不做任何处理使⽤时,需要注意,如果属性为引⽤类型时,Spring环境中如果存在多个类型相同的Bean对象,那么会发⽣错误如果属性为数组和集合时,Spring环境中如果存在多个类型相同的Bean对象,那么不会发⽣错误3.可以使⽤全局⾃动装配标签中使⽤Default-autowire="byName",只对当前⽂件有效9.Spring 的⽣命周期1.applicationContext在读取配置⽂件的时候就默认创建了对象,想在使⽤的时候再创建对象,⽤延迟加载(lazy-init = “true”),会出现这样的问题:使⽤了⾃动装配功能,那么延迟加载不起作⽤2如果创建对象后希望执⾏初始化⽅法,那么在延迟加载后声明init-method=”init”,初始化⽅法要求:⽅法⾥不能传参数,在设置属性之后执⾏,可以抛出异常3.调⽤销毁⽅法⽤destroy-method=””,很少⽤到4.对象默认是单例创建的,scope=”prototype”(原型创建),声明这个属性之后,创建对象就是多例了,属性为scope=”singleton”,创建对象是单例的如果使⽤多例创建对象,设置延迟加载不起作⽤,肯定是在使⽤时创建5.依赖创建(depend-on)如果⼀个对象创建时,必须保证另外⼀个对象已经创建,那么使⽤依赖创建的⽅式10.Spring在web环境中的使⽤1.步骤:1.创建web环境2.增加jar包(Spring.jar)3.引⼊配置⽂件,放在src下4.修改Web.xml⽂件,增加对Spring的⽀持(增加监听器)2.在程序中就可以直接访问Spring对象了问题:如果修改了配置⽂件,必须重新启动服务器,否则不起作⽤,struts2有⾃动加载功能,注意区分3.Spring(将service对象组合到action对象中)+struts21.使⽤第⼀种⽅式,action由struts2创建,service由Spring创建2.引⼊相应的struts2配置3.引⼊额外的java包,Spring的插件:struts2-spring-plugin-2.1.8.1.jar使⽤插件jar包,不需要做其他⼯作,就可以将Action对象进⾏组合,因为底层,这个插件改变了获取Action对象及属性的创建⽅式。
详解SpringBootAOP拦截器(Aspect注解方式)
详解SpringBootAOP拦截器(Aspect注解⽅式)常⽤⽤于实现拦截的有:Filter、HandlerInterceptor、MethodInterceptor第⼀种Filter属于Servlet提供的,后两者是spring提供的,HandlerInterceptor属于Spring MVC项⽬提供的,⽤来拦截请求,在MethodInterceptor之前执⾏。
实现⼀个HandlerInterceptor可以实现接⼝HandlerInterceptor,也可以继承HandlerInterceptorAdapter类,两种⽅法⼀样。
这个不在本⽂范围,具体使⽤之前已经写过SpringBoot的(SpringMVC的使⽤⼀样,区别只是配置)MethodInterceptor是AOP项⽬中的拦截器,它拦截的⽬标是⽅法,即使不是Controller中的⽅法。
实现MethodInterceptor拦截器⼤致也分为两种,⼀种是实现MethodInterceptor接⼝,另⼀种利⽤Aspect的注解或配置。
关于实现MethodInterceptor接⼝的这种⽅法,还需要在配置⽂件中做配置,在SpringMVC中使⽤还可以,在SpringBoot中使⽤起来似乎没有那么⽅便。
本⽂主要还是说Aspect注解⽅式,个⼈觉得这种⽅法才⽐较灵活,与配置与⼯程整个代码都没有耦合(你添加⼀个类,做⼏个注解就可以⽤了,⽆需在其他地⽅再做什么),更易应⽤。
⾸先为你的SpringBoot项⽬添加maven依赖,让其⽀持aop(其实就是⾃动引⼊aop需要的⼀些jar)在pom.xml中添加依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>然后创建Aspect测试类:package com.shanhy.sboot.aop;import ng.JoinPoint;import ng.annotation.After;import ng.annotation.Aspect;import ng.annotation.Before;import org.springframework.core.annotation.Order;import ponent;@Aspect // FOR AOP@Order(-99) // 控制多个Aspect的执⾏顺序,越⼩越先执⾏@Componentpublic class TestAspect {@Before("@annotation(test)")// 拦截被TestAnnotation注解的⽅法;如果你需要拦截指定package指定规则名称的⽅法,可以使⽤表达式execution(...),具体百度⼀下资料⼀⼤堆 public void beforeTest(JoinPoint point, TestAnnotation test) throws Throwable {System.out.println("beforeTest:" + ());}@After("@annotation(test)")public void afterTest(JoinPoint point, TestAnnotation test) {System.out.println("afterTest:" + ());}}这样就完成了,然后创建⼀个Controller验证⼀下:@RestController@RequestMapping("/test")public class TestController {@TestAnnotation(name="abc")@RequestMapping("/show")public String show() {return "OK";}@RequestMapping("/show2")public String show2() {return "OK2";}}此时我们访问show请求,就会被拦截,控制台会打印输出。
最全面的Spring学习笔记
最全⾯的Spring学习笔记致⼒于提供⼀种⽅法管理你的业务对象。
在⼤量Java EE的应⽤中,随处可见Spring。
今天我将简单的介绍⼀下Spring这个框架。
本⽂适合读者:想学Spring的Java开发者刚⽤Spring不久的⼈Why为什么要使⽤Spring?Spring主要两个有功能为我们的业务对象管理提供了⾮常便捷的⽅法:DI(Dependency Injection,依赖注⼊)AOP(Aspect Oriented Programming,⾯向切⾯编程)Java Bean每⼀个类实现了Bean的规范才可以由Spring来接管,那么Bean的规范是什么呢?必须是个公有(public)类有⽆参构造函数⽤公共⽅法暴露内部成员属性(getter,setter)实现这样规范的类,被称为Java Bean。
即是⼀种可重⽤的组件。
DI-依赖注⼊简单来说,⼀个系统中可能会有成千上万个对象。
如果要⼿⼯维护它们之间的关系,这是不可想象的。
我们可以在Spring的XML⽂件描述它们之间的关系,由Spring⾃动来注⼊它们——⽐如A类的实例需要B类的实例作为参数set进去。
AOP-⾯向切⾯编程就以⽇志系统为例。
在执⾏某个操作前后都需要输出⽇志,如果⼿⼯加代码,那简直太可怕了。
⽽且等代码庞⼤起来,也是⾮常难维护的⼀种情况。
这⾥就需要⾯向切⾯来编程How关于BeanBean的⽣命周期如你所见,在bean准备就绪之前,bean⼯⼚执⾏了若⼲启动步骤。
我们对图进⾏详细描述:1. Spring对bean进⾏实例化;2. Spring将值和bean的引⽤注⼊到bean对应的属性中;3. 如果bean实现了BeanNameAware接⼝,Spring将bean的ID传递给setBean-Name()⽅法;4. 如果bean实现了BeanFactoryAware接⼝,Spring将调⽤setBeanFactory()⽅法,将BeanFactory容器实例传⼊;5. 如果bean实现了ApplicationContextAware接⼝,Spring将调⽤setApplicationContext()⽅法,将bean所在的应⽤上下⽂的引⽤传⼊进来;6. 如果bean实现了BeanPostProcessor接⼝,Spring将调⽤它们的post-ProcessBeforeInitialization()⽅法;7. 如果bean实现了InitializingBean接⼝,Spring将调⽤它们的after-PropertiesSet()⽅法。
springaop面试题
springaop面试题
一、面试官问:AOP是什么?
与OOP对比,面向切面,传统的OOP开发中的代码逻辑是至上而下的过程中会长生一些横切性问题,这些横切性的问题和我们的主业务逻辑关系不会散落在代码的各个地方,造成难以维护,AOP的编程思想就是把业务逻辑和横切的问题进行分离,从而达到解耦的目的,使代码的重用性和开发效率高(目的是重用代码,把公共的代码抽取出来)。
二、面试官问:AOP的应用场景有哪些呢?
1、日志记录;
2、权限验证;
3、效率检查(个人在代码上,喜欢用注解+切面,实现校验,redis 分布式锁等功能);
4、事务管理(spring的事务就是用AOP实现的);
三、面试官问:springAop的底层是怎样实现的?
1、JDK动态代理;
2、CGLIB代理;
四、面试官问:springAOP和AspectJ的关系?
1、两者都是为了实现AOP这个目的,而出现的技术,springaop 参考AspectJ编程风格。
aop在项目中的实际运用
aop在项目中的实际运用AOP(Aspect-Oriented Programming)是面向切面编程的缩写,是一种软件开发方法论,旨在将横向关注点从应用程序的核心逻辑中分离出来,从而提高代码的模块性和可重用性。
AOP的核心概念是横切关注点(Cross-cutting Concerns),即应用程序中与核心业务逻辑无关但需要在多个模块中重复执行的逻辑,例如日志记录、安全性、事务管理等。
在项目中,AOP可以广泛应用于以下方面:1.日志记录:通过AOP可以将日志记录的逻辑横向切入到应用程序的各个模块中,避免在每个模块中重复编写日志记录的代码,提高代码的可维护性。
例如,在每个方法执行前后记录方法的输入参数、输出结果等信息,方便调试和日志分析。
2.安全性:通过AOP可以将安全性的检查逻辑横向切入到应用程序的不同层次中,确保每个关键操作都经过必要的权限验证。
例如,在用户访问一些敏感资源之前,可以使用AOP拦截器进行用户身份验证,只允许拥有相应权限的用户访问。
3.事务管理:通过AOP可以将事务管理的逻辑横向切入到应用程序的各个数据访问层中,确保多个数据库操作要么全部成功,要么全部失败,提高数据一致性。
例如,在执行数据库操作的方法前后,使用AOP拦截器管理事务的启动、提交或回滚。
4.性能监控:通过AOP可以将性能监控的逻辑横向切入到应用程序的关键方法中,实时监控方法的执行时间、消耗的资源等指标,优化程序的性能。
例如,在执行关键方法前后,使用AOP拦截器记录方法的执行时间,并进行性能分析和优化。
5.异常处理:通过AOP可以将异常处理的逻辑横向切入到应用程序的各个模块中,统一管理异常的捕获和处理。
例如,在每个方法执行中,使用AOP拦截器捕获异常并进行统一处理,避免异常导致程序崩溃或不可预期的状态。
6.缓存管理:通过AOP可以将缓存管理的逻辑横向切入到应用程序的不同层次中,提高数据查询性能。
例如,在执行数据查询方法前,使用AOP拦截器检查缓存中是否存在相应数据,如果存在则直接返回缓存数据,否则执行数据库查询并将结果缓存起来。
java实训个人总结报告5篇
java实训个人总结报告5篇篇1一、引言本次Java实训旨在提升个人在Java编程语言方面的能力,通过系统地学习和实践,加深对Java基础语法、面向对象编程、常用数据结构与算法、网络编程、数据库操作等方面的理解和掌握。
在为期一个月的实训中,我积极参与,认真完成每一个任务,不仅巩固了理论知识,还提高了实际操作能力。
二、主要收获1. 深入理解了Java基础语法:通过学习Java的基础语法,如变量、数据类型、运算符、流程控制等,我能够熟练编写基本的Java程序,为后续的学习奠定了坚实的基础。
2. 掌握了面向对象编程的思想:Java是一种面向对象的语言,通过学习和实践,我逐渐掌握了面向对象编程的思想,包括类的定义、对象的创建、封装、继承、多态等概念,能够运用这些思想来解决实际问题。
3. 熟悉了常用数据结构与算法:在Java中,提供了丰富的数据结构和算法库,通过学习这些内容,我能够熟练运用数组、列表、集合等数据结构,并掌握了一些常用的排序、查找等算法。
4. 了解了网络编程的基本原理:在网络编程方面,我学习了Java 中的Socket编程、HTTP通信等基本原理,并能够运用这些原理来编写简单的网络应用程序。
5. 学会了数据库操作的基本方法:在数据库操作方面,我学习了Java中的JDBC技术,并能够运用这种技术来连接数据库、执行SQL 语句、处理结果集等基本操作。
三、个人感受通过本次Java实训,我不仅巩固了理论知识,还提高了实际操作能力。
在学习的过程中,我感受到了Java语言的强大和灵活,同时也意识到了自己的不足和需要改进的地方。
在未来的学习和工作中,我会继续努力,不断提高自己的编程能力。
四、存在的问题及改进措施在本次Java实训中,我发现自己在某些方面还存在不足,如对一些高级特性和优化技巧的了解不够深入,在实际应用中还需要进一步学习和掌握。
此外,在编程实践中,我还需要加强自己的代码规范性和可读性,避免出现一些低级错误。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、AOP 概念
Joinpoint:它定义在哪里加入你的逻辑功能,对于Spring AOP,Jointpoint 指的就是Method。
Advice:特定的Jointpoint处运行的代码,对于Spring AOP 来讲,有Before advice、AfterreturningAdvice、ThrowAdvice、AroundAdvice(MethodInteceptor)等。
Pointcut:一组Joinpoint,就是说一个Advice可能在多个地方织入,
Aspect:这个我一直迷惑,它实际是Advice和Pointcut的组合,但是Spring AOP 中的Advisor也是这样一个东西,但是Spring中为什么叫Advisor而不叫做Aspect。
Weaving:将Aspect加入到程序代码的过程,对于Spring AOP,由ProxyFactory 或者ProxyFactoryBean负责织入动作。
Target:这个很容易理解,就是需要Aspect功能的对象。
Introduction:引入,就是向对象中加入新的属性或方法,一般是一个实例一个引用对象。
当然如果不引入属性或者引入的属性做了线程安全性处理或者只读属性,则一个Class一个引用也是可以的(自己理解)。
Per-class lifecycle or per-instance life cycle
二、AOP 种类
1、静态织入:指在编译时期就织入Aspect代码,AspectJ好像是这样做的。
2、动态织入:在运行时期织入,Spring AOP属于动态织入,动态织入又分静动两种,静则指织入过程只在第一次调用时执行;动则指根据代码动态运行的中间状态来决定如何操作,每次调用Target的时候都执行(性能较差)。
三、Spring AOP 代理原理
Spring AOP 是使用代理来完成的,Spring 会使用下面两种方式的其中一种来创建代理:
1、JDK动态代理,特点只能代理接口,性能相对较差,需要设定一组代理接口。
2、CGLIB 代理,可代理接口和类(final method除外),性能较高(生成字节码)。
四、Spring AOP 通知类型
1、BeforeAdvice:前置通知需实现MethodBeforeAdvice,但是该接口的Parent 是BeforeAdvice,致于什么用处我想可能是扩展性需求的设计吧。
或者Spring 未来也并不局限于Method的JoinPoint(胡乱猜测)。
BeforeAdvice可以修改目标的参数,也可以通过抛出异常来阻止目标运行。
2、AfterreturningAdvice:实现AfterreturningAdvice,我们无法修改方法的返回值,但是可以通过抛出异常阻止方法运行。
3、AroundAdvice:Spring 通过实现MethodInterceptor(aopalliance)来实现包围通知,最大特点是可以修改返回值,当然它在方法前后都加入了自己的逻辑代码,因此功能异常强大。
通过MethodInvocation.proceed()来调用目标方法(甚至可以不调用)。
4、ThrowsAdvice:通过实现若干afterThrowing()来实现。
5、IntroductionInterceptor:Spring 的默认实现为DelegatingIntroductionInterceptor
五、Spring AOP Pointcut
以上只是Advice,如果不指定切入点,Spring 则使用所有可能的Jointpoint 进行织入(当然如果你在Advice中进行方法检查除外)。
因此切入点在AOP中扮演一个十分重要的角色。
Spring 2.0 推荐使用AspectJ的Annocation的切入点表达式来定义切入点,或者使用<aop:xxx/>来定义AOP,这方面本篇不做考虑。
1、Pointcut:它是Spring AOP Pointcut的核心,定义了getClassFilter()和getMethodMatcher()两个方法。
2、ClassFilter:定义了matches(Class cls)一个方法。
3、MethodMatcher() 定义了matches(Method,Class),isRuntime(),matches(Mathod,Class,Object[])三个方法,如果isRuntime()返回true则表示为动态代理(实际是动态代理的动态代理),则调用第三个方法(每访问一次调用一次),否则调用第一个方法(并且只调用一次)
4、Spring AOP 静态切入点的几个实现。
ComposablePointcut太复杂一个切入点无法表达就用这个,union MethodMatcher和ClassFilter或者intersection MethodMatcher、ClassFilter 和Pointcut。
为什么不实现union Pointcut? 而只能通过Pointcuts类对Pointcut进行union操作。
ControlFlowPointcut想对程序的运行过程进行追踪就用这个
DynamicMatchMatcherPointcut想用动态AOP 就用这个
JdkRegexpMethodPointcut 想使用正则表达式就用这个
Perl5RegexpMethodPointcut
NameMatchMethodPointcut想用方法名字来匹配就用这个
StaticMethodMatcherPointcut静态切入点就用这个
没有人反对你直接实现Pointcut:)。
六、Spring AOP 中的Advisor其实就是Aspect
1、 PointcutAdvisor
其实一般使用DefaultPointcutAdvisor就足够了,给它Advice和Pointcut。
当然如果想少写那么几行代码也可以使用NameMatchMethodPointcutAdvisor,RegexpMethodPointcutAdvisor等。
更多Advisor可以查看API文档。
2、 IntroductionAdvisor
默认实现为DefaultIntroductionAdvisor。
七、AOP ProxyFactory
使用代码实现AOP 可使用ProxyFactory
声明式AOP 可使用ProxyFactoryBean
ProxyFactoryBean 需要设定 target,interceptorNames(可以是Advice或者Advisor,注意顺序)
对接口代理需设置proxyInterfaces
八、自动代理
BeanNameAutoProxyCreator
Java代码
1<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoPro xyCreator">
2 <property
name="beanNames"><value>jdk*,onlyJdk</value></property>
3 <property name="interceptorNames">
4 <list>
5 <value>myInterceptor</value>
6 </list>
7 </property>
8</bean>
DefaultAdvisorAutoProxyCreator
Java代码
9<bean
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorA utoProxyCreator"/>
10<bean
class="org.springframework.transaction.interceptor.TransactionAttr ibuteSourceAdvisor">
11 <property name="transactionInterceptor" ref="transactionInterceptor"/>
12</bean>
13<bean id="customAdvisor" class="com.mycompany.MyAdvisor"/>
14<bean id="businessObject1" class="com.mycompany.BusinessObject1">
15 <!-- Properties omitted -->
16</bean>
17<bean id="businessObject2" class="com.mycompany.BusinessObject2"/>。