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 {……}

例4Spring容器开启注解信息:多个包可用逗号隔开

<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>  

 

 


0 0
原创粉丝点击