您的位置:首页 > 编程语言 > Java开发

Spring关于IOC,DI,AOP的一点理解

2019-09-27 19:32 686 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_43564549/article/details/101555329

1.Spring IOC

      Spring IOC主要用来降低程序间的耦合性,在不用Sping框架时,我们为了解决程序间的耦合问题,即尽量减少使用new 来创建对象,可以利用工厂模式来减耦,通过将对象的创建全部交给工厂类,工厂类中的某个方法通过读取配置文件properties,将对象创建出来并且存入Map容器中,其他类需要使用到某个对象直接到容器中去取,降低耦合性的例子还要还有JDBC注册驱动类的两种方法,一个是DriverManager.registerDriver(new Driver()),另一个是class.forName("com.mysql.jdbc.driver")利用反射来注册,有效的降低了耦合性,Spring 基于此,利用IOC将对象创建的权力交给Spring,某个类需要哪个对象直接到Spring容器中去取即可,这也就是控制反转。

 

2.Spring DI

     Spring DI,也就是依赖注入,容器在运行时直接将某个类需要用到的一些其他对象提供给他。

 

3.Spring AOP

   在程序的service层经常会用到一些大量重复的代码,例如为了保证数据库事务的一致性,我们需要在调用数据库CRUD方法前后加上一些有关事务的代码,还比如日志,在方法前后也加入,这样使得程序很复杂,也不便于维护,例如事务类的某个方法改变(autocommit,commit,rollback,close),需要改变service的方法太多,以前我们为了解决这种情况,通过实现代理类,代理类的实现方法有两种,一个是基于接口的实现类,代理对象通过Proxy.newInstance(xx.getClass().getClassLoader,xx.getClass().getInterfaces,new InvoationHander(){

}} 通过加强内部类的invoke方法来实现,还有一种是基于子类的实现,代理对象通过Enhancer.create(

[code]producer.getClass(), new MethodInterceptor(){}来实现,注意内部类访问外部对象需要将外部对象设置为final,spring AOP基于动态代理技术实现他的面向切面编程

另外aop中的环绕通知实现有点类似于简化版的代理类

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: