class A{
int a;
int b;
public void execute(){}
}
A a = new A();
@autowire A a;
a.execute();
@autowire InterfaceA a;
@Resource("aaa") A b;
@autowire A a;
实例化的先后顺序
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的动态代理是通过生成一个被代理对象的子类,然后重写父类的方法
生成以后的对象,可以强制转换为被代理对象(也就是用自己写的类)
子类引用赋值给父类
工厂模式(工厂模式关心的是结果)
/实现统一管理、专业化管理
码农就是执行标准的人
系统架构师,就是制定标准的人
不只做一个技术者,更要做一个思考者