IOC与AOP的理解

转自 https://blog.csdn.net/qq_38006047/article/details/80797386

1,理解“控制反转”

   控制反转,也叫依赖注入,是面向对象编程中的一种设计理念,用来降低程序代码之间的耦合度。

  程序的耦合:调用者与被调用者的依赖关系。

 比如:程序员A负责编写A类,程序员B负责B类开发,A类的某些功能需要是梨花B类的对象调用其方法才能完成,那么A类就依赖B类,如果程序员B不写B类 难道程序员A要一直等下去?

 企业开发的原则:“编译时不依赖,运行时才依赖”

// 所谓的A类依赖B类
public class PersonServiceBean{
      private PersonDao personDao=new PersonDaoBean();
  
      public void save(Person person){
            personDao.save(person);
      }
}

PersonDaoBean是在应用内部创建及维护的。

所谓“控制反转”就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。

2,依赖注入

 当我们把依赖对象交给外部容器负责创建,那么PersonServiceBean类就可以改成:

public class PersonServiceBean{
      private PersonDao personDao;
      // 通过构造参数,让容器把创建好的依赖对象注入进PersonServiceBean,当然也可以使用setter方法进行注入
       public PersonServiceBean(PersonDao personDao ){
         this.personDao=personDao ;
 
      }
      public void save(Person person){
            personDao.save(person);
      }
}

所谓依赖注入是指:在运行期,由外部容器动态地将依赖对象注入到组件中。

Spring AOP

理解“面向切面编程”

比如在两个类中,可能都需要在每个方法中记录日志。按照面向对象的设计方法,我们就必须在两个日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这写重复的代码统一起来。

      也许会有人说,那好办啊,我们可以将这段代码写在一个独立的类中独立的方法里,然后再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?

这种在运行时,动态地将代码切入到类的制定方法、指定位置上的编程思想就是面向切面编程。

简单地说就是不改变原程序的基础上为代码增加新的功能,对代码进行增强处理。

 

常用增强处理类型:

 

posted @ 2019-06-17 10:27  野生野鸡码农  阅读(331)  评论(0编辑  收藏  举报