在上一篇博客上,用字符串类型的属性简单的介绍了下Spring的属性注入,这片文章会介绍更高级的属性注入.
属性注入-注入对象类型
场景介绍:我们现在要做一个新增用户的操作.
在不使用Spring类开发时,我们传统的开发应该是UserService通过UserDao来操作数据库实现对User的新增,代码如下.
传统的开发:
package cn.com.yves.spring;public class UserDao {public void addUser() {System.out.println("add user success!");}}
public class UserService {private UserDao dao = null;public UserService(UserDao dao) {this.dao = dao;}public void setDao(UserDao dao) {this.dao = dao;}public void addUser() {this.dao.addUser();}}
使用Spring开发
在UserService中的属性dao就是一个对象类型.这里就需要用到注入对象类型的属性.要用到属性ref.ref 属性可以引用另一个 bean 的 id 或 name.
<bean id&#61;"userService" class&#61;"cn.com.yves.spring.UserService"><property name&#61;"dao" ref&#61;"userDao">property>bean>
name属性值dao为类UserService中的属性,ref的值:
的id值.
具体代码如下:
package cn.com.yves.spring;public class UserDao {public void addUser() {System.out.println("add user success!");}
}
package cn.com.yves.spring;public class UserService {private UserDao dao &#61; null;public void setDao(UserDao dao) {this.dao &#61; dao;}public void addUser() {System.out.println("do add user service.");this.dao.addUser();}}
<beans xmlns&#61;"http://www.springframework.org/schema/beans" xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation&#61;"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id&#61;"userService" class&#61;"cn.com.yves.spring.UserService"><property name&#61;"dao" ref&#61;"userDao">property>bean><bean id&#61;"userDao" class&#61;"cn.com.yves.spring.UserDao">bean>beans>
测试方法:
&#64;Testpublic void test() {ApplicationContext context &#61; new ClassPathXmlApplicationContext("Application.xml");UserService service &#61; (UserService) context.getBean("userService");service.addUser();}
结果:
do add user service.
add user success!
spring-属性注入(对象类型)
属性注入-注入复杂类型属性
这里以简单的String类型为例子,如果子类型时对象类型,可以参考注入对象的ref属性来注入.
User.java
package cn.com.yves.spring;import java.util.List;
import java.util.Map;
import java.util.Properties;public class User {private String[] arrays;private List lists;private Map maps;private Properties props; public String[] getArrays() {return arrays;}public void setArrays(String[] arrays) {this.arrays &#61; arrays;}public List getLists() {return lists;}public void setLists(List lists) {this.lists &#61; lists;}public Map getMaps() {return maps;}public void setMaps(Map maps) {this.maps &#61; maps;}public Properties getProps() {return props;}public void setProps(Properties props) {this.props &#61; props;}public void showInfo() {System.out.println("message:" &#43; this.arrays &#43; "\t" &#43; this.lists &#43; "\t" &#43; this.maps &#43; "\t" &#43; this.props);}}
Application.xml
<beans xmlns&#61;"http://www.springframework.org/schema/beans" xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation&#61;"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id&#61;"user" class&#61;"cn.com.yves.spring.User"><property name&#61;"arrays"><list><value>array1value><value>array2value><value>array3value>list>property><property name&#61;"lists"><list><value>list1value><value>list2value><value>list3value>list>property><property name&#61;"maps"><map><entry key&#61;"aa" value&#61;"lucy">entry><entry key&#61;"bb" value&#61;"jack">entry><entry key&#61;"cc" value&#61;"yves">entry>map>property><property name&#61;"props"><props><prop key&#61;"driverclass">com.mysql.jdbc.Driverprop><prop key&#61;"username">rootprop>props>property>bean>beans>
测试代码:
&#64;Testpublic void test() {ApplicationContext context &#61; new ClassPathXmlApplicationContext("Application.xml");User user &#61; (User) context.getBean("user");user.showInfo();}
结果:
message:[Ljava.lang.String;&#64;77ec78b9 [list1, list2, list3] {aa&#61;lucy, bb&#61;jack, cc&#61;yves} {driverclass&#61;com.mysql.jdbc.Driver, username&#61;root}
spring-属性注入(复杂类型)