代理模式

Spring域属性和代理模式

孤者浪人 提交于 2019-12-02 16:14:15
Spring域属性和代理模式 一、域属性 好处:大幅度减少Spring配置 坏处:依赖不能明确管理,可能会有多个bean同时符合注入规则。没有清晰的依赖关系。 1,byName 根据属性名自动装配。此选项将检查容器并根据名字查找 与属性完全一致的bean,并将其与属性自动装配。 2,byType 如果容器中存在一个与指定属性类型相同的bean,那么将与 该属性自动装配;如果存在多个该类型bean,那么抛出异常, 并指出不能使用byType方式进行自动装配;如果没有找 到相匹配的bean,则什么事都不发生,也可以通过设置 二、Bean的生命周期 在IoC容器启动之后,并不会马上就实例化相应的bean,此时容器仅仅拥有所有对象的BeanDefinition(BeanDefinition:是容器依赖某些工具加载的XML配置信息进行解析和分析, 并将分析后的信息编组为相应的BeanDefinition)。只有当getBean()调用时才是有可能触发Bean实例化阶段的活动 Bean一生的过程 ####可以简述为以下九步 实例化bean对象(通过构造方法或者工厂方法) 设置对象属性(setter等)(依赖注入) 如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。(和下面的一条均属于检查Aware接口)

Java动态代理

岁酱吖の 提交于 2019-12-02 16:11:54
本文链接:https://blog.csdn.net/zcc_0015/article/details/22695647 一、动态代理与静态代理的区别。 (1)Proxy类的代码被固定下来,不会因为业务的逐渐庞大而庞大; (2)可以实现AOP编程,这是静态代理无法实现的; (3)解耦,如果用在web业务下,可以实现数据层和业务层的分离。 (4)动态代理的优势就是实现无侵入式的代码扩展。 静态代理这个模式本身有个大问题,如果类方法数量越来越多的时候,代理类的代码量是十分庞大的。所以引入动态代理来解决此类问题 二、动态代理 Java中动态代理的实现,关键就是这两个东西:Proxy、InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的。 首先,invoke方法的完整形式如下: Java代码 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { method.invoke(obj, args); return null; }    首先猜测一下,method是调用的方法,即需要执行的方法;args是方法的参数;proxy,这个参数是什么?以上invoke()方法的实现即是比较标准的形式

java动态代理

纵饮孤独 提交于 2019-12-02 16:11:22
原文地址:https://blog.csdn.net/zcc_0015/article/details/22695647 一、动态代理与静态代理的区别。 (1)Proxy类的代码被固定下来,不会因为业务的逐渐庞大而庞大; (2)可以实现AOP编程,这是静态代理无法实现的; (3)解耦,如果用在web业务下,可以实现数据层和业务层的分离。 (4)动态代理的优势就是实现无侵入式的代码扩展。 静态代理这个模式本身有个大问题,如果类方法数量越来越多的时候,代理类的代码量是十分庞大的。所以引入动态代理来解决此类问题 二、动态代理 Java中动态代理的实现,关键就是这两个东西:Proxy、InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的。 首先,invoke方法的完整形式如下: Java代码 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { method.invoke(obj, args); return null; } 首先猜测一下,method是调用的方法,即需要执行的方法;args是方法的参数;proxy,这个参数是什么?以上invoke()方法的实现即是比较标准的形式

动态代理(jdk&cglib)的用法

若如初见. 提交于 2019-12-02 16:01:25
什么是代理模式(Proxy) 定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用 在代理模式中,是需要代理对象和目标对象实现同一个接口 为什么要用代理 最最最主要的原因就是,在不改变目标对象方法的情况下对方法进行增强,比如,我们希望对方法的调用增加日志记录,或者对方法的调用进行拦截,等等... 一:JDK动态代理 JDK 动态代理所用到的代理类在程序调用到 代理类对象时才由JVM真正创建 ,JVM根据传进来的 业务实现类对象 以及 方法名 ,动态地创建了一个代理类的class文件并被字节码引擎执行,然后通过该代理类对象进行方法调用。 案例 1、 定义业务接口以及实现类 package com.yjc.jdkproxy; public interface DoSomeService { void doSome(); } ------------------------------------------- package com.yjc.jdkproxy; public class DoSomeServiceImpl implements DoSomeService { @Override public void doSome() { System.out.println("doSome++++++++++++++++++=="); } } 2

Spring的代理模式(静态,JDK,CGLIB)

落花浮王杯 提交于 2019-12-02 15:45:34
一.静态代理 1.定义业务接口 1 public interface Subject { 2 void doSomeThing(); 3 } 2.真实业务类实现接口 1 public class RealSubject implements Subject{ 2 @Override 3 public void doSomeThing() { 4 System.out.println("真实业务"); 5 } 6 } 3.代理类也实现业务接口,创建真实业务对象,在重写的方法中做方法增强 1 public class proxySubject implements Subject{ 2 Subject proxy = new RealSubject(); 3 @Override 4 public void doSomeThing() { 5 System.out.println("前置增强"); 6 proxy.doSomeThing(); 7 System.out.println("后置增强"); 8 } 9 } 4.测试类执行结果 1 public class proxyTest { 2 public static void main(String [] args){ 3 Subject proxy = new proxySubject(); 4 proxy.doSomeThing

Spring事务_注解_特性

喜夏-厌秋 提交于 2019-12-02 15:44:47
Spring 是一个 IOC 和 AOP 容器框架。 ## 控制反转(IOC) ## 传统的 java 开发模式中,当需要一个对象时,我们会自己使用 new 或者 getInstance 等直接或者间接调用构造方法创建一个对象。而在 spring 开发模式中,spring 容器使用了工厂模式为我们创建了所需要的对象,不需要我们自己创建了,直接调用 spring 提供的对象就可以了,这是控制反转的思想。 ## 依赖注入(DI) ## spring 使用 javaBean 对象的 set 方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程,就是依赖注入的思想。 ## 面向切面编程(AOP) ## 在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。AOP 底层是动态代理,如果是接口采用 JDK 动态代理,如果是类采用CGLIB 方式实现动态代理。 **动态代理** AOP实现的关键在于 代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。 (1)AspectJ是静态代理的增强,所谓静态代理,就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强,他会在编译阶段将AspectJ

代理模式 静态代理与动态代理

荒凉一梦 提交于 2019-12-02 15:43:50
代理模式 1 、什么是代理模式?   真实生活中有一种房屋中介是这样的,租客根本就不知道房东是谁,一切签合同、交租金、交钥匙等操作都直接和中介公司发生。我们把这种模式称之为代理模式。   代理模式:客户端直接使用的都是代理对象,不知道目标对象是谁,此时代理对象可以在客户端和目标对象之间起到中介的作用。 2 、特点   代理对象完全包含目标对象,客户端使用的都是代理对象的方法,和目标对象没有直接关系 3 、职责   把不是目标对象该做的事情从目标对象上撇开 —— 职责清晰。 4 、分类   静态代理:在程序运行前就已经存在代理类的字节码文件,代理对象和目标对象的关系在运行前就确定了。   动态代理:动态代理类是在程序运行期间由 JVM 通过反射等机制动态的生成的,所以不存在代理类的字节码文件。代理对象和真实对象的关系是在程序运行事情才确定的。    1. 静态代理 创建一个接口 PPP 被代理的类 Subject 继承接口方法 代理类 Ss 继承接口方法 测试类 Ptest 运行结果 2. 动态代理 (1) JDK 动态代理 创建一个接口 创建代理类 测试类 (2) CGLIB 创建代理类 测试类 来源: https://www.cnblogs.com/qinzhenyu/p/11752294.html

Spring代理模式

喜你入骨 提交于 2019-12-02 15:39:32
一、域属性 byName <!--byName约束:bean当中的域属性名必须跟所注入bean的id相同--> <bean id="student" class="cn.spring.entity.Student" autowire="byName"> <property name="stu_id" value="1"></property> <property name="stu_name" value="张三"></property> <!–域属性注入 手动 通过 ref指向所引用的bean–> <!–<property name="teacher" ref="teacher"></property>–> </bean> byType <!--byType:要求被注入域属性类型只能唯一,与其向兼容的类型也同样不可以--> <bean id="student" class="cn.spring.entity.Student" autowire="byType" scope="prototype"> <property name="stu_id" value="1"></property> <property name="stu_name" value="张三"></property> <!-- <!–域属性注入 手动 通过 ref指向所引用的bean–> <!–<property

常用设计模式(单例,代理,工厂,观察者)

烂漫一生 提交于 2019-12-02 15:34:50
单例:线程池、任务管理器。 1.饿汉模式:类加载时就创建好单例对象,调用静态方法返回单例对象,不需要考虑多线程问题。 class Singleton{   private static singleInstance = new Singleton();   private Singleton(){}   public static Singleton getInstance(){     return singleInstance;   } } 2.懒汉模式:在调用方法时再创建单例对象 class Singleton{   private static volatile Singleton singleInstance = null;   private Singleton(){}   public static synchronized getInstance(){     if(singleInstance==null){     singleInstance = new Singleton();   }   return singleInstance;   } } 简单工厂模式: public class LenovoComputer extends Computer{ @Override public void start() { System.out.println(

23种设计模式通俗理解

徘徊边缘 提交于 2019-12-02 15:23:54
23种设计模式通俗理解 1、FACTORY 工厂方法 追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 2、BUILDER建造者模式 MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖) 建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。 3、FACTORY METHOD抽象工厂 请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说