Spring的IOC和AOP之深剖

我们首先要知道,用Spring主要是两件事:

1、开发Bean;2、配置Bean。对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例,并调用bean实例的方法完成“依赖注入”。

Spring框架的作用是什么?有什么优点?

1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring的DI机制降低了业务对象替换的复杂性
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部

什么是DI机制?

依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色
需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中
创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者
因此也称为依赖注入。 是面向编程中的一种设计理念,用来减低程序代码之间的耦合度。
spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。
设置注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。

现在我们用例子来具体理解它

1.Spring提供的几种依赖注入(控制反转)的方式

1)setter(设置)注入
2)构造器注入
3)接口注入

但是,我们要了解什么是依赖?

我们所知道的依赖:

①依靠别人或事物而不能自立或自给;②指各个事物或现象互为条件而不可分离。

专业解析:依赖,在代码中一般指通过局部变量,方法参数,返回值等建立的对于其他对象的调用关系。

例如:在A类的方法中,实例化了B类的对象并调用其方法以完成特定的功能,我们就说A类依赖于B类。

Spring设置注入和构造注入的区别

设置注入是先通过调用无参构造器创建一个bean实例,然后调用对应的setter方法注入依赖关系;而构造注入则直接调用有参数的构造器,当bean实例创建完成后,已经完成了依赖关系的注入。另外这两种依赖注入的方式,并没有绝对的好坏,只是适应的场景有所不同。

setter方法注入:

Entity

public class Happy {
private String happyInfo;
   


public void happy(){
    System.out.println(happyInfo);
}

public String getHappyInfo() {
    return happyInfo;
}

public void setHappyInfo(String happyInfo) {
    this.happyInfo = happyInfo;
}

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans/spring-beans.xsd">
 <!-- IOC 将Happy 交给Spring管理 -->
  <bean>
        <!-- DI 从setInfo方法得知,Happy依赖info属性,注入            赋值-->
        <!--通过框架来赋值,不能用set()方法来赋值  -->
        <!--happyinfo 是set()提供的  -->
        <property value="中秋快乐"></property>     
        <!-- <property>
        <value>中秋快乐</value>
        </property> -->
  </bean>
</beans> 

test类

public static void main(String[] args) {
    //获取上下文对象
    //ApplicationContext context2=new FileSystemXmlApplicationContext("applicationContext.xml");
   
    //BeanFactory beanf=new FileSystemXmlApplicationContext("applicationContext.xml");
   
    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
    //    Object getBean(String name) throws BeansException;
    Happy happy = (Happy) context.getBean("happy");
   
    happy.happy();
}
}

注意:ApplicationContext  ,其实还有BeauFactory也可以,那么它们两的区别是啥呢?请看下面

Spring的IOC和AOP之深剖

Spring的IOC和AOP之深剖

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d0a66771283e2103c6bdc01c098f5a37.html