初识依赖注入(DI)

摘要:
Spring框架的核心功能之一就是通过依赖注入的方式来管理Bean之间的依赖关系。A不应该担心B的实现。使用index属性来显式的指定构造函数参数的索引。5、注入集合有助于连线,如注入一列值,允许重复。它有助于连线一组值,但不能重复。它可以用来注入名称-值对的集合,其中名称和值都是字符串类型。

Spring框架的核心功能之一就是通过依赖注入的方式来管理Bean之间的依赖关系。

1、基于构造函数的DI,当容器调用带有一组参数的类构造函数时,基于构造函数的 DI 就完成了,其中每个参数代表一个对其他类的依赖

(1)A 不应该担心 B 的实现。B 将会独立实现,并且在 A 实例化的时候将提供给 A,整个过程是由 Spring 框架的控制。

(2). java文件:

packagecom.xxx;
public classA {
   privateB b;
   publicA(B b) {
      this.b =b;
   }
   public voida() {
      b.xxx();
   }
}

(3).xml文件:

<bean id="a"class="xxx.a">
     <constructor-arg ref="b"/>
</bean>

<bean id="b"class="xxx.b">
</bean>

<bean xxx c:name="John Doe"c:spouse-ref="jane"/> //构造器注入可以用c-namespace

2、构造函数参数解析:

问题:如果存在不止一个参数时,当把参数传递给构造函数时,可能会存在歧义。解决如下:

(1)构造函数的参数在 bean 定义中的顺序就是把这些参数提供给适当的构造函数的顺序就可以了。

(2)使用 type 属性显式的指定了构造函数参数的类型,容器也可以使用与简单类型匹配的类型。

(3)使用 index 属性来显式的指定构造函数参数的索引。(最好)

对应 .xml文件:

<constructor-arg type="java.lang.String"value="xxx"/>
<constructor-arg index="0"value="xxx"/>

3、beans 的 setter 方法的DI,当容器调用一个无参的构造函数或一个无参的静态 factory 方法来初始化你的 bean 后,通过容器在你的 bean 上调用设值函数,基于设值函数的 DI 就完成了。

(1)唯一的区别就是在基于构造函数注入中,我们使用的是〈bean〉标签中的〈constructor-arg〉元素,而在基于设值函数的注入中,我们使用的是〈bean〉标签中的〈property〉元素。

(2)XML 配置文件可以使用 p-namespace 以一种更简洁的方式重写

<bean xxx>
     <property name="name"value="John Doe"/>
     <property name="spouse"ref="jane"/>
</bean>

<bean xxx p:name="John Doe"p:spouse-ref="jane"/> //使用前加约束

4、注入内部 Beans,Java 内部类是在其他类的范围内被定义的,同理,inner beans 是在其他 bean 的范围内定义的 bean。

<bean id="outerBean"class="...">
     <property name="xxx">
         <bean id="innerBean"class="..."/>
     </property>
</bean>

5、注入集合

(1)<list> 有助于连线,如注入一列值,允许重复。

(2)<set> 它有助于连线一组值,但不能重复。

(3)<map> 它可以用来注入名称-值对的集合,其中名称和值可以是任何类型。

(4)<props> 它可以用来注入名称-值对的集合,其中名称和值都是字符串类型。

<list>
    <ref bean="address1"/>
    <value>Pakistan</value>
</list>

<set>
   <ref bean="address1"/>
   <value>Pakistan</value>
</set>

<map>
   <entry key="one"value="INDIA"/>
   <entry key ="two"value-ref="address1"/>
</map>

<props>
     <prop key="one">INDIA</prop>//只能是字符串
</props>

<property name="xxx"value=""/>//注入空值

<property name="xxx"><null/></property> //注入null值

免责声明:文章转载自《初识依赖注入(DI)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JEECMS站群管理系统-- 标签的配置流程Anaconda使用conda activate激活环境出错:CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'....下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

普通Java类获取spring 容器的bean的5种方法

本文转载自:http://www.cnblogs.com/duanxz/archive/2014/06/18/3794075.html 方法一:在初始化时保存ApplicationContext对象方法二:通过Spring提供的工具类获取ApplicationContext对象方法三:继承自抽象类ApplicationObjectSupport方法四:继承...

spring自动注入的三种方式

所谓spring自动注入,是指容器中的一个组件中需要用到另一个组件(例如聚合关系)时,依靠spring容器创建对象,而不是手动创建,主要有三种方式: 1. @Autowired注解——由spring提供 2. @Resource注解——由JSR-250提供 3. @Inject注解——由JSR-330提供   @Autowired注解的使用方法 @Tar...

基于java容器注解---基于泛型的自动装配

上面利用@Configuration和@Bean配置bean,中间利用@Autowired,指定s1和s2分别指向哪个实现类,下面利用@Autowired,指定s中只有Integer实现类 例子: 在接口中指定T的泛型: 在实现类中指定确定的类型: config的class类中利用@Bean配置bean: 测试类:...

CAS 单点登陆

一、Tomcat配置SSL 1. 生成 server key 以命令方式换到目录%TOMCAT_HOME%,在command命令行输入如下命令:keytool -genkey -alias tomcat_key -keyalg RSA -storepass changeit -keystore server.keystore -validity 3600...

spring定时任务原理

参考文章:https://juejin.im/post/5b64448af265da0f7f44c201 https://juejin.im/post/5e338ebae51d4558864b1ca0 1、开发中使用时要注意的点 (0)spring定时任务执行原理实际使用的是JDK自带的ScheduledExecutorService (1)spring默...

springMVC ——Controller配置方式

一.手动配置方式(开发中主要用注解方式,可以直接看标题二:注解方式)1.web.xml中DispatcherServlet控制器的的配置 SpringMVC也是一种基于请求驱动的WEB框架,并且使用了前端控制器的设计模式。前端控制器就是DispatcherServlet控制器,只要满足web.xml文件中的【url-pattern】的规则,这个请求就会交给...