Spring IOC & AOP
2017-09-21 16:19
295 查看
IOC(DI):
Java中每个业务逻辑至少需要啷个或以上的对象来协同完成,通常每个对象在使用其他合作对象的时候,都需要使用想new Object()这样的方式来完成合作对象的申请,当业务繁多时,对象之间的耦合性就会很高。而Ioc就是通过Spring容器来实现这些相互依赖的对象间的创建和协调工作,对象只需要关心业务逻辑本身就可以了,从这方便将,对象如何得到他的协作对象的责任就被反转了(IOC,DI).
简单讲解,Spring就是通过工厂 + 反射将业务bean放到它的容器中,当需要使用某个bean的时候,只需要调用context.getBean(“beanId”)的方法即可使用。
Spring容器的原理:就是通过解析xml,读取到用户配置的bean,申明一个存放bean的Map,然后通过jdom解析配置文件,循环遍历所有节点,并通过反射将这些bean挨个放到Map中,然后对外提供一个getBean()方法,客户端通过ClassPathXmlApplicationContext.xml根据bean的Id来获得这些bean。
1、首先就是applicationContext.xml配置对应业务的bean对象
2、然后spring容器加载配置文件xml里面读取bean对象信息,保存在一个HashMap中,HashMap的key就是Bean的id,Value就是这个bean,这样就可以通过context.getBean(“*“)这个方法获得对应的业务bean。
3、Spring的注入核心思想就是通过反射机制实现的,在实例化一个类时,它通过反射调用类中的set方法将事先保存在HashMap中的类属性注入到类中
4、最后将这个类的实例返回给我们,即可使用
参考 http://wiki.jikexueyuan.com/project/ssh-noob-learning/container-ioc-resolution.html
AOP
IOC负责将对象动态的注入到容器,从而达到一种需要谁就注入谁的效果,
而AOP则让容器中的对象都享有容器中的公共服务,核心内容就是动态代理。
动态代理就是利用反射和动态编译将代理模式变成动态的,原理跟动态注入一样,代理模式在编译的时候就已经确定代理类将要代理谁,而动态代理在运行的时候才知道自己要代理谁。
Spring的动态代理有两种:
一是JDK的动态代理,主要就是通过反射和动态编译来实现的;
二是cglib动态代理(通过修改字节码来实现代理)。
比如要对用户管理进行打印管理,
1、首先定义一个接口和实现类,实现方法addUser()和delUser();
2、利用反射接收被代理类,通过反射可以获取到被代理类的类型、方法等;
3、JDK动态代理有两个核心分别是InvocationHandler和Proxy;
4、共用的打印方法实现InvocationHandler接口,通过构造器获取被代理的类;
5、实现动态代理的关键部分就是通过Proxy来动态生成具体的代理类。利用反射获取被代理类的所有方法并组装生成Java源文件,然后再将Java文件编译成class文件加载到内存并实例化,返回生成我们想要的代理类了;
6、生成的代理类即可调用被代理类的相应方法,同时在生成的代理类中,会调用共同的打印方法;
7、这样就完成了一个面向切面编程的整个过程
参考:
http://blog.csdn.net/it_man/article/details/4402245
http://wiki.jikexueyuan.com/project/ssh-noob-learning/dynamic-proxy.html
Java中每个业务逻辑至少需要啷个或以上的对象来协同完成,通常每个对象在使用其他合作对象的时候,都需要使用想new Object()这样的方式来完成合作对象的申请,当业务繁多时,对象之间的耦合性就会很高。而Ioc就是通过Spring容器来实现这些相互依赖的对象间的创建和协调工作,对象只需要关心业务逻辑本身就可以了,从这方便将,对象如何得到他的协作对象的责任就被反转了(IOC,DI).
简单讲解,Spring就是通过工厂 + 反射将业务bean放到它的容器中,当需要使用某个bean的时候,只需要调用context.getBean(“beanId”)的方法即可使用。
Spring容器的原理:就是通过解析xml,读取到用户配置的bean,申明一个存放bean的Map,然后通过jdom解析配置文件,循环遍历所有节点,并通过反射将这些bean挨个放到Map中,然后对外提供一个getBean()方法,客户端通过ClassPathXmlApplicationContext.xml根据bean的Id来获得这些bean。
1、首先就是applicationContext.xml配置对应业务的bean对象
2、然后spring容器加载配置文件xml里面读取bean对象信息,保存在一个HashMap中,HashMap的key就是Bean的id,Value就是这个bean,这样就可以通过context.getBean(“*“)这个方法获得对应的业务bean。
3、Spring的注入核心思想就是通过反射机制实现的,在实例化一个类时,它通过反射调用类中的set方法将事先保存在HashMap中的类属性注入到类中
4、最后将这个类的实例返回给我们,即可使用
参考 http://wiki.jikexueyuan.com/project/ssh-noob-learning/container-ioc-resolution.html
AOP
IOC负责将对象动态的注入到容器,从而达到一种需要谁就注入谁的效果,
而AOP则让容器中的对象都享有容器中的公共服务,核心内容就是动态代理。
动态代理就是利用反射和动态编译将代理模式变成动态的,原理跟动态注入一样,代理模式在编译的时候就已经确定代理类将要代理谁,而动态代理在运行的时候才知道自己要代理谁。
Spring的动态代理有两种:
一是JDK的动态代理,主要就是通过反射和动态编译来实现的;
二是cglib动态代理(通过修改字节码来实现代理)。
比如要对用户管理进行打印管理,
1、首先定义一个接口和实现类,实现方法addUser()和delUser();
2、利用反射接收被代理类,通过反射可以获取到被代理类的类型、方法等;
3、JDK动态代理有两个核心分别是InvocationHandler和Proxy;
4、共用的打印方法实现InvocationHandler接口,通过构造器获取被代理的类;
5、实现动态代理的关键部分就是通过Proxy来动态生成具体的代理类。利用反射获取被代理类的所有方法并组装生成Java源文件,然后再将Java文件编译成class文件加载到内存并实例化,返回生成我们想要的代理类了;
6、生成的代理类即可调用被代理类的相应方法,同时在生成的代理类中,会调用共同的打印方法;
7、这样就完成了一个面向切面编程的整个过程
参考:
http://blog.csdn.net/it_man/article/details/4402245
http://wiki.jikexueyuan.com/project/ssh-noob-learning/dynamic-proxy.html
相关文章推荐
- Spring入门(IOC&AOP)
- Spring基础(一)——AOP&IoC
- SSH复习笔记---Spring IOC&AOP
- Spring IOC&AOP 深入剖析(史上最全,没有之一)
- Spring4深入理解IOC&DI02----Bean配置--自动装配、bean之间的继承与依赖、使用外部属性文件
- 理解Spring中的IOC和AOP
- spring的IOC,DI依赖注入和AOP
- Spring之IOC&DI/装配Bean(一)
- SSH整合 第四篇 Spring的IoC和AOP
- Spring(IOC/AOP)注解学习
- spring,IOC和AOP
- spring IoC和AOP的原理
- Spring基础(IOC&DI)
- Spring-3,IOC&DI的简单理解
- Spring IoC和AOP的理解
- spring源码分析,重新认识spring三(总结,总结下 ioc 和 aop,同时提出疑惑)
- Spring如何实现IOC与AOP的
- spring的依赖注入(DI)、控制反转(IOC)和面向切面(AOP)
- Spring IOC + AOP 的实现