Spring源码分析--代理模式、工厂模式

class A{
        int a;
        int b;
        public void execute(){}
}

//实例化以后用一个变量保存下来(匿名对象)
A a = new A();

@autowire A a;//Spring 初始化,实例化(控制权)

//一定要初始化才行,报空指针异常
a.execute();

//IOC容器(存的是java bean)

//Web容器,用来装Servlet的

//实现依赖注入(赋值)  把 = 号右边的东西赋值给左边
@autowire InterfaceA a;//自动把它的实现类注入进来
@Resource("aaa") A b;//IOC容器中类的id为aaa对象自动注入到这里(可以区分父子类的)
@autowire A a; //根据类型自动注入

//依赖链中的所有的对象,ioc容器里面初始化
实例化的先后顺序


Spring的注入方式
1、setter
2、构造方法
3、强制赋值


AOP核心思想:解耦(AOP就是定义规则,解耦的规则是切面,面向切面编程;面向规则编程)
先要把一个整体,给拆了,分别开发
等到发布的时候,再组装到一起运行


这种有规律的东西,就可以认为它就是一个固定的规则,这时候,我们就单独把这个具有一定规律的规则,单独分离出来,作为一个独立模块。

AOP的功能完全集成到了Spring事务管理、日志和其他各种特性的上下文中。
    Authentication 权限认证
    Logging 日志
    Transactions Manager 事物
    Lazy Loading 懒加载
    Context Process 上下文处理
    Error Handler 错误跟踪(异常捕获机制)
    Cache 缓存处理

spring的核心宗旨是简化开发;
AOP的核心思想是解耦;

代理模式(代理模式关心的是过程,每一步操作都是有实时跟踪把控的,我都知道你在做什么)


特点:
    1、执行者、被代理人(两个角色:执行者、被代理对象)
    2、对于被代理人来说,这件事情是一定要做的,但是我自己又不想做或者没有时间做,找代理(注重过程,必须要做,被代理对象没时间做或者不想做(怕羞羞),不专业)
    3、需要获取到被代理人的个人资料(执行者必须拿到被代理对象的个人资料(执行者持有被代理对象的引用))

原理:
    1.拿到被代理对象的引用,然后获取它的接口
    2.JDK代理重新生成一个类,同时实现我们给的代理对象所实现的接口
    3.把被代理对象的引用也拿到了
    4.重新动态生成一个class字节码
    5.然后编译

代理模式做了一件什么事情呢?----> 字节码重组。
    动态代理可以做一件什么事情?可以在每个方法调用之前加一些代码,在方法调用之后再加一些代码。
    AOP:事物代理(申明式事务,在哪个方法需要加事务,哪个方法不需要加事务)、日志监听。
    service 方法

    开启一个事务(open)

    事务的执行(是由我们自己的代码完成的);

    监听到是否有异常,可能需要根据异常的类型来决定这个事务是否要回滚还是继续提交。(commit/rollback)
    事务要关闭(close)

    JDK动态代理:
                JDK的动态代理是通过接口来进行强制转换的;
                生成以后的代理对象,可以强制转换为接口。

    CGlib动态代理:
                CGLib的动态代理是通过生成一个被代理对象的子类,然后重写父类的方法
                生成以后的对象,可以强制转换为被代理对象(也就是用自己写的类)
                子类引用赋值给父类

工厂模式(工厂模式关心的是结果)

//Spring中的工厂模式
            //Bean
            //BeanFactory(生成Bean)
            //单例的Bean
            //被代理过的Bean
            //最原始的Bean(原型)
            //List类型的Bean
            //作用域不同的Bean

            //getBean
            //非常的紊乱,维护困难
            //解耦(松耦合开发)


/实现统一管理、专业化管理
//如果没有工厂模式,小作坊,没有执行标准的
//如果买到三无产品(没有标准)
//卫生监督局工作难度会大大减轻
码农就是执行标准的人
系统架构师,就是制定标准的人
不只做一个技术者,更要做一个思考者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值