实现依赖注入的多种方式

来源:互联网 发布:伊丽莎白雅顿天猫 知乎 编辑:程序博客网 时间:2024/05/16 14:38
理解构造注入


掌握使用p命名空间实现属性注入


理解不同数据类型的注入方法






设值注入
1.声明一个接口(被注入对象所实现的接口)
2.提供setter方法,动态注入实例通道
3.编写配置文件,配置注入关系


构造注入
1.声明一个接口(被注入对象所实现的接口)
2.带参的构造函数,带参的构造函数和构造类型与Spring要注入的类型要相同(创建带参构造方法,编写带参构造方法后,Java虚拟机不再提供默认的无参构造方法,为了保证使用的灵活性,建议自行添加一个无参的构造方法)
 
3.Spring构造注入在为属性赋值的时候使用了一个标签(与设值注入有区别)




在Spring配置文件中通过<constructor-arg>元素为构造方法传参
<bean id="userDao" class="dao.impl.UserDaoImpl"/>
<bean id="userService" class="service.impl.UserServiceImpl">
    <constructor-arg><ref bean="userDao"/></constructor-arg>
</bean>


1.一个<constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序。(在配置不区分顺序,和构造方法不需要保持一致)
2.通过<constructor-arg>元素的index属性可以指定该参数的位置索引,位置从0开始
3.<constructor-arg>元素还提供了type属性用来指定参数的类型,避免字符串和基本数据类型的混淆


(限制比较少)
设值注入
通过setter访问器实现
灵活性好,但setter方法数量较多
时效性差
通过无参构造实例化


(参数比较多,想把一些属性设置只读的话,建议使用构造方法)
构造注入
通过构造方法实现
灵活性差,仅依靠重载限制太多
时效性好
通过匹配的构造方法实例化,但建议保留无参构造




p命名空间的特点:使用属性而不是子元素的形式配置Bean的属性,从而简化了配置代码
   对于直接量(基本数据类型/字符串)属性:p:属性名="属性值"
   对于引用Bean的属性:p:属性名=ref="Bean的id"


使用前要先要在Spring配置文件中引入p命名空间
xmlns:p="http://www.springframework.org/schema/p"


使用p命名空间注入属性值
   <bean id="user" class="entity.User" p:age="23"
    p:username="张三" 
    p:email="@xxx.com"/>
   
   <bean id="userService"     class="service.impl.UserServiceImpl"
    p:dao-ref="userDao"/>


注入直接量
    使用<value>标签实现
    注意特殊字符的处理.


引用Bean
    使用<ref>标签实现
    注意bean属性和local属性的区别


使用内部Bean
    <propert name="dao">
        <bean class="dao.impl.UserDaoImpl"/>
    </property>


注入集合类型的属性
    分别使用<list> <set> <map> <props>标签实现


注入null和空字符串值
    使用<null/>注入null值
    使用<value></value>注入空字符串


Properties类型 (链接数据库)
url=...
driverClass=
username=...
passord=..


构造注入
通过构造方法实现
灵活性差,仅靠重载限制太多
时效性好
通过匹配的构造方法实例化,建议保留无参构造


使用p:命名空间注入
简化了配置代码
对于直接量属性和对于引用Bean属性的配置