一、 IoC(Inversion of control): 控制反转
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean
内部最核心的就是IOC
动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射
反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置 文件来动态的创建对象,和调用对象里的方法的 。
动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射
反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置 文件来动态的创建对象,和调用对象里的方法的 。
二、AOP(Aspect-Oriented Programming): 面向方面编程
1、 代理的两种方式:
静态代理:
针对每个具体类分别编写代理类;
针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
2、 AOP的主要原理:动态代理
1、 代理的两种方式:
静态代理:
针对每个具体类分别编写代理类;
针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
2、 AOP的主要原理:动态代理
另一个核心就是AOP
这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的。
Spring目的 :就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明
管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住 :Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式。 Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了
也就基本上掌握了Spring.
Spring目的 :就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明
管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住 :Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式。 Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了
也就基本上掌握了Spring.
三、 spring 原理
spring 的最大作用 ioc/di, 将类与类的依赖关系写在配置文件中,
程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间
的藕合度。它的原理是在 applicationContext.xml 加入 bean 标记 ,
在 bean 标记中通过 class 属性说明具体类名、通过 property 标签说明
该类的属性名、通过 constructor-args 说明构造子的参数。其一切都是
返射,当通过 applicationContext.getBean("id 名称 ") 得到一个类实例时,
就是以 bean 标签的类名、属性名、构造子的参数为准,通过反射实例对象,
唤起对象的 set 方法设置属性值、通过构造子的 newInstance 实例化得到对象。
正因为 spring 一切都是反射,反射比直接调用的处理速度慢,所以这也是 spring
的一个问题。
spring 第二大作用就是 aop ,其机理来自于代理模式,代理模式
有三个角色分别是通用接口、代理、真实对象
代理、真实对象实现的是同一接口,将真实对象作为
代理的一个属性,向客户端公开的是代理,当客户端
调用代理的方法时,代理找到真实对象,调用真实对象
方法,在调用之前之后提供相关的服务,如事务、安全、
日志。其名词分别是代理、真实对象、装备、关切点、连接点。
四、 动态代理 :
不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过
类实例化一个动态代理,在实例化动态代理时将真实对象
及装备注入到动态代理中,向客户端公开的是动态代理,
当客户端调用动态代理方法时,动态代理根据类的返射得
到真实对象的 Method, 调用装备的 invoke 方法,将动态代理、
Method 、方法参数传与装备的 invoke 方法, invoke 方法在唤
起 method 方法前或后做一些处理。
1 、产生动态代理的类 :
java.lang.refect.Proxy
2 、装备必须实现 InvocationHandler 接口实现 invoke 方法
五、反射:
什么是类的返射 ?
通过类说明可以得到类的父类、实现的接口、内部类、构造函数、方法、属性 并可以根据构造器实例化一个对象,唤起一个方法,取属性值,改属性值。
如何得到一个类说明 ?
Class cls= 类 .class;
Class cls= 对象 .getClass();
Class.forName(" 类路径 ");
如何得到一个方法并唤起它 ?
Class cls= 类 .class;
Constructor cons=cls.getConstructor(new Class[]{String.class});
Object obj=cons.newInstance(new Object[]{"aaa"});
Method method=cls.getMethod(" 方法名 ",new Class[]{String.class,Integer.class});
method.invoke(obj,new Object[]{"aa",new Integer(1)});
六、 spring 的三种注入方式
s etter
interface
constructor
七、 spring 的核心接口及核类配置文件
FactoryBean: 工厂 bean 主要实现 ioc/di
ApplicationContext ac=new FileXmlApplicationContext("applicationContext.xml");
Object obj=ac.getBean("id 值 ");
applicationContext.xml