依赖注入与控制反转

DI的全称是Dependency Injection,中文称之为依赖注入。它与控制反转(IoC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念

IoC:在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转,这就是控制反转

DI:从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调

用者注入了它依赖的实例,这就是Spring的依赖注入

Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制。Spring为我们提供了两种核心容器,分别为BeanFactory和ApplicationContext

创建BeanFactory实例时,需要提供Spring所管理容器的详细配置信息,这些信息通常采用XML文件形式来管理,其加载配置信息的语法如下:

1.BeanFactory创建

BeanFactory beanFactory =
new XmlBeanFactory(new FileSystemResource("F: /applicationContext.xml"));

这种加载方式在实际开发中并不多用,作为了解即可

2.通过ApplicationContext的子类来创建

.ApplicationContext是BeanFactory的子接口,是另一种常用的Spring核心容器。它由org.springframework.context.ApplicationContext接口定义,不仅包含了BeanFactory的所有功能,还添加了对国际化、资源访问、事件传播等方面的支持。创建ApplicationContext接口实例,通常采用两种方法,具体如下:

                  1. 通过ClassPathXmlApplicationContext创建

ApplicationContext applicationContext =
new ClassPathXmlApplicationContext(String configLocation);

   ClassPathXmlApplicationContext会从类路径classPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作

                  2. 通过FileSystemXmlApplicationContext创建   

ApplicationContext applicationContext =
new FileSystemXmlApplicationContext(String configLocation);

FileSystemXmlApplicationContext会从指定的文件系统路径(绝对路径)中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作

创建Spring容器后,就可以获取Spring容器中的Bean。Spring获取Bean的实例通常采用以下两种方法:

1.Object getBean(String name);根据容器中Bean的id或name来获取指定的Bean,获取之后需要进行强制类型转换

2.<T> T getBean(Class<T> requiredType);根据类的类型来获取Bean的实例。由于此方法为泛型方法,因此在获取Bean之后不需要进行强制类型转换

Springpeiz配置文件

<?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
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

<bean id="userDao" class="com.itcx.dao.impl.UserDaoImpl" />

<bean id="userService" class="com.itcx.dao.impl.UserDaoImpl">
<property name="userDao" ref="userDao" />
</bean>

</beans>

Spring框架的优点

Spring具有简单、可测试和松耦合等特点。Spring不仅可以用于服务器端开发,也可以应用于任何Java应用的开发中

1,非侵入式设计

2.方便解耦,简化开发

3.支持AOP

4.支持声明事务处理

5.方便程序测试

6.方便集成各种优秀框架

7.降低javaEE API的使用难度

猜你喜欢

转载自blog.csdn.net/z_ssyy/article/details/81876329