五 依赖注入
五 依赖注入1>set注入方式1 对象注入 先看接口 PersonDao.javapackage cn.itcast.service;public interface PersonDao {public void add();}PersonServicepackage cn.itcast.service;public interface PersonService {public void save();}实现类 PersonDaoBean.javapackage cn.itcast.service.impl;import cn.itcast.service.PersonDao;public class PersonDaoBean implements PersonDao { /* (non-Javadoc) * @see cn.itcast.service.impl.PersonDao#add() */ public void add(){ System.out.println("我是PersonDaoBean里的add方法"); }}PersonServiceBean.javapackage cn.itcast.service.impl;import cn.itcast.service.PersonDao;import cn.itcast.service.PersonService;public class PersonServiceBean implements PersonService { private PersonDao persondao;public PersonDao getPersondao() {return persondao;}public void setPersondao(PersonDao persondao) {this.persondao = persondao;}public void save(){System.out.println("我是在PersonServiceBean中的save()方法");persondao.add();}public void init(){System.out.println("我是在PersonServiceBean中的初始化的方法");}public void destroy(){System.out.println("我是在PersinServiceBean中的释放资源的方法");}}配置文件 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 依赖对象 --> <!-- 方式一 set方法注入 --> <!-- <bean id="persondao" init-method="init" destroy-method="destroy"> <property name="persondao" ref="persondao"></property> </bean> --> <!-- 方式二(使用内部bean,但该bean不能被其他bean使用) --> <bean id="personservice" init-method="init" destroy-method="destroy"> <property name="persondao"> <bean init-method="init" destroy-method="destroy"> <property name="persondao"> <bean value="itcast"></property> </bean> 实现类修改 package cn.itcast.service.impl;import cn.itcast.service.PersonDao;import cn.itcast.service.PersonService;public class PersonServiceBean implements PersonService { private PersonDao persondao; private String name;public PersonDao getPersondao() {return persondao;}public void setPersondao(PersonDao persondao) {this.persondao = persondao;}public void save(){System.out.println("我是在PersonServiceBean中的save()方法");System.out.println("name="+name);persondao.add();}public String getName() {return name;}public void setName(String name) {this.name = name;}public void init(){System.out.println("我是在PersonServiceBean中的初始化的方法");}public void destroy(){System.out.println("我是在PersinServiceBean中的释放资源的方法");}}测试 AbstractApplicationContext tx=new ClassPathXmlApplicationContext("beans.xml");PersonService personservie=(PersonService)tx.getBean("personservice");personservie.save();tx.close();3 集合属性注入Set集合属性注入 <!-- 集合注入 --> <property name="set"> <set> <value>第一个</value> <value>第二个</value> <value>第三个</value> </set> </property> <property name="list"> <list> <value>list集合1</value> <value>list集合2</value> <value>list集合3</value> </list> </property> <property name="p"> <props> <prop key="who is he?">我是谁</prop> <prop key="do you know">你懂吗</prop> <prop key="that's goodidear">好主意</prop> </props> </property> <property name="map"> <map> <entry key="xuchunrong" value="许春荣"></entry> <entry key="huhuan" value="huhuan"></entry> <entry key="nihao" value="李好"></entry> </map> </property>2>构造器注入方式1 利用构造器注入方式注入属性和对象值配置 <bean id="persondao" ref="persondao"></constructor-arg> <constructor-arg index="1" value="xuchunrong"></constructor-arg></bean>接口package cn.itcast.service;public interface PersonDao {public void add();}package cn.itcast.service;public interface PersonService {public void save();}实现类package cn.itcast.service.impl;import cn.itcast.service.PersonDao;public class PersonDaoBean implements PersonDao { /* (non-Javadoc) * @see cn.itcast.service.impl.PersonDao#add() */ public void add(){ System.out.println("我是PersonDaoBean里的add方法"); }}package cn.itcast.service.impl;import cn.itcast.service.PersonDao;import cn.itcast.service.PersonService;public class PersonServiceBean implements PersonService { private PersonDao persondao; private String name;public void save(){System.out.println("我是save()方法");this.persondao.add();System.out.println("name----------->"+name);}public PersonServiceBean(PersonDao persondao, String name) {this.persondao = persondao;this.name = name;}}测试类AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");PersonService personService = (PersonService)ctx.getBean("personService");personService.save();3>使用Field注入(用于注解方式)?