Setter注入
Dao层:
Dao层接口: public interface FruitDao { public void create(); } 实现类: public class FruitDaoImpl implements FruitDao { public void create(){ System.out.println("Dao层方法create被调用"); } }
服务层接口: public interface FruitService { public void create(); }
服务层实现类: public class FruitServiceImpl implements FruitService { private FruitDao fruitDao;
@Override public void create() { fruitDao.create(); }
public void setFruitDao(FruitDao fruitDao) { this.fruitDao = fruitDao; } }
Test方法: public class Test {
public static void main(String[] args) { ApplicationContext acx = new ClassPathXmlApplicationContext( "chapter2.xml"); FruitService fruitService =(FruitService)acx.getBean("fruitService"); fruitService.create(); } }
XML配置: <?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"> <bean id="fruitDao" class="dao.impl.FruitDaoImpl"/> <bean id="fruitService" class="service.impl.FruitServiceImpl"> <property name="fruitDao" ref="fruitDao" /> </bean> </beans> |
需要注意的地方:
<property name="fruitDao" ref="fruitDao" />
这里的name="fruitDao"并不是私有属性的名字,实际上Spring会根据这个名字找对应的setFruitDao这个方法来达到注入的一个目的. fruitDao是set方法的简单名称
使用set注入基本与复杂类型:
MyClass: public class MyClass { private String id; private String name; private Set<Student> students = new HashSet<Student>();
public MyClass() { super(); }
public MyClass(String name) { super(); this.name = name; }
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getName() { return name; |