Spring依赖注入/控制反转的四种方式以及特殊字符的注入
来源:互联网 发布:深入分析linux内核 编辑:程序博客网 时间:2024/05/16 23:51
Spring依赖注入/控制反转的四种方式以及特殊字符的注入
==================================================
方式一:set访问器
1.bean-id作为bean的唯一标示符,可在其他bean中引用时使用;
bean-class代表其实现类的完整路径;
property-name代表bean-class中的对应的setXx(){}方法;
Bean相当于UserDao userDao=new IUserDao();property相当于userDao.set(user)
<bean id="user" class="com.yunhe.entity.User">
<property name="uname" value="大神"></property>
<property name="pwd" value="123"></property>
</bean>
<bean id="userDao" class="com.yunhe.dao.impl.IUserDao">
<property name="u" ref="user"></property>
</bean>
2.注意:HibernateDaoSupport的底层方法中含有sessionFactory以及final set()方法,在继承中,只需要Spring容器注入sessionFactory即可,其子类不能写sessionFactory以及set()方法.
3.下边为框架自动生成的sessionFactory
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean>
4.sessionFactory的注入方式,当自定义数据源时,property-ref为定义的bean-id
<bean id="uDao" class="com.yunhe.ssh.dao.impl.IUserDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
5.单元测试时利用定义的bean生成对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Printer printer = (Printer) context.getBean("printer");
==================================================
方式二:构造注入
1.com.yunhe.entity.User建议自行添加一个无参构造方法,并编写带参构造方法
<bean id="user" class="com.yunhe.entity.User">
<constructor-arg index="0" type="java.lang.String"><value>用户名</value></constructor-arg>
<constructor-arg index="1" type="java.lang.String"><value>密码</value></constructor-arg>
</bean>
<bean id="userDao" class="com.yunhe.dao.impl.UserDao">
<constructor-arg>
<ref bean="user"/>
</constructor-arg>
</bean>
2.一个<constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序。
3.通过<constructor-arg>元素的index属性可以指定该参数的位置索引,位置从0开始。
4.<constructor-arg>元素还提供了type属性用来指定参数的类型,避免字符串和基本数据类型的混淆。
==================================================
方式三:p命名空间
添加p标签
<bean id="user" class="entity.User" p:age="23" p:username="张三"p:email="zhangsan@pbdevj.com" />
<bean id="userBiz" class="biz.impl.UserBiz" p:dao-ref="userDao" />
==================================================
方式四:注解方式
例1:注解方式将Bean的定义信息和Bean实现类结合在一起,Spring提供的注解有
@Component
@Repository :用于标注DAO类
@Service :用于标注业务类
@Controller :用于标注控制器类
@Repository("userDao")
public class UserDao implements IDao {}
与在XML配置文件中编写<bean id="userDao" class="dao.impl.UserDao" />等效
例2:使用@Autowired注解实现Bean的自动装配,默认按类型匹配,可以使用@Qualifier指定Bean的名称,可以对类的成员变量进行标注,也可以对方法的入参进行标注
@Qualifier("userDao")
private IDao dao;
@Autowired
public void setDao(IDao dao) {this.dao = dao;}
例3:使用@Scope注解指定Bean的作用域
@Scope("prototype")
@Service("userBiz")
public class UserBiz implements IUserBiz {……}
例4:Spring容器开启注解信息:多个包可用逗号隔开
<context:component-scan base-package="com.yh.ssh.dao,com.yh.ssh.biz,com.yh.ssh.action"></context:component-scan>
==================================================
特殊字符的注入:内置对象,list,set,map,properties,空字符串,null
1. <?xml version="1.0" encoding="UTF-8"?>
2. <beans xmlns="http://www.springframework.org/schema/beans"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xsi:schemaLocation="http://www.springframework.org/schema/beans
5. http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
6.
7. <bean id="entity" class="entity.TestEntity">
8. <!-- 使用<![CDATA[]]>标记处理XML特 殊字符 -->
9. <property name="specialCharacter1" >
10. <value><![CDATA[P&G]]></value>
11. </property>
12. <!-- 把XML特殊字符替换为实体引用 -->
13. <property name="specialCharacter2">
14. <value>P<G</value>
15. </property>
16.
17. <!-- 定义内部Bean -->
18. <property name="innerBean" >
19. <bean class="entity.User">
20. <property name="username">
21. <value>Mr. Inner</value>
22. </property>
23. </bean>
24. </property>
25. <!-- 注入List类型 -->
26. <property name="list">
27. <list>
28. <!-- 定义List中的元素 -->
29. <value>足球</value>
30. <value>篮球</value>
31. </list>
32. </property>
33. <!-- 注入数组类型 -->
34. <property name="array">
35. <array>
36. <!-- 定义数组中的元素 -->
37. <value>足球</value>
38. <value>篮球</value>
39. </array>
40. </property>
41. <!-- 注入Set类型 -->
42. <property name="set">
43. <set>
44. <!-- 定义Set或数组中的元素 -->
45. <value>足球</value>
46. <value>篮球</value>
47. </set>
48. </property>
49. <!-- 注入Map类型 -->
50. <property name="map">
51. <map>
52. <!-- 定义Map中的键值对 -->
53. <entry>
54. <key>
55. <value>football</value>
56. </key>
57. <value>足球</value>
58. </entry>
59. <entry>
60. <key>
61. <value>basketball</value>
62. </key>
63. <value>篮球</value>
64. </entry>
65. </map>
66. </property>
67. <!-- 注入Properties类型 -->
68. <property name="props">
69. <props>
70. <!-- 定义Properties中的键值对 football=足球 -->
71. <prop key="football">足球</prop>
72. <prop key="basketball">篮球</prop>
73. </props>
74. </property>
75. <!-- 注入空字符串值 -->
76. <property name="emptyValue" value="">
77.
78. </property>
79. <!-- 注入null值 -->
80. <property name="nullValue">
81. <null/>
82. </property>
83. <property name="users">
84.
85. <list>
86. <bean class="entity.User">
87. <property name="username">
88. <value>Mr. Inner1</value>
89. </property>
90. </bean>
91. <bean class="entity.User">
92. <property name="username">
93. <value>Mr. Inner2</value>
94. </property>
95. </bean>
96. </list>
97. </property>
98. </bean>
99. </beans>
- Spring依赖注入/控制反转的四种方式以及特殊字符的注入
- spring四种依赖注入方式 ( 依赖注入DI+ 控制反转IOC的原理)
- 对spring控制反转以及依赖注入的理解
- 对spring控制反转以及依赖注入的理解
- 对spring控制反转以及依赖注入的理解
- spring的控制反转,依赖注入以及概述
- spring依赖注入(控制反转)的多种方式
- Spring的控制反转与依赖注入
- Spring的控制反转与依赖注入
- spring控制反转,依赖注入的理解
- Spring的控制反转和依赖注入
- spring依赖注入的四种方式
- Spring依赖注入的四种方式
- spring 依赖注入的四种方式
- spring四种依赖注入的方式
- spring依赖注入的四种方式
- spring的四种依赖注入方式
- Spring 的四种方式依赖注入
- caffe基础(6):solver及其设置
- 记录一款软件
- iOS 时间与日期处理
- Javascript中Math对象、数组方法
- php源码安装(附:php安装shell脚本)
- Spring依赖注入/控制反转的四种方式以及特殊字符的注入
- leetCode OJ 44. Wildcard Matching
- jQuery EasyUI使用教程之创建具有复选框节点的树
- eclipse快捷键冲突解决方案
- schedule的执行时间问题
- android-R.dimen
- 1005 Problem E
- python笔记之NUMPY(二)
- RedHat6.5下Mysql_5.6.31安装教程