实现的效果为:
Service service=(Service)beans.get("userService");
Dao dao = (Dao)beans.get("userDAO");
//依赖注入,Service实现依赖dao的实现
service.setDao(dao);
5.User:实体类
package com.example.domain; public class User { private String userName; private String password; /** * @return the userName */ public String getUserName() { return userName; } /** * @param userName the userName to set */ public void setUserName(String userName) { this.userName = userName; } /** * @return the password */ public String getPassword() { return password; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append(this.userName); sb.append(this.password); return sb.toString(); } }6.UserDAO
package com.example.dao; import com.example.domain.User; public interface UserDAO { void save(User u); void delete(); }7.UserDAOImpl
package com.example.dao.impl; import com.example.dao.UserDAO; import com.example.domain.User; public class UserDAOImpl implements UserDAO { @Override public void save(User u) { System.out.println("User:" + u.toString()); } @Override public void delete() { System.out.println("delete User"); } }8.UserService
package com.example.service; import com.example.dao.UserDAO; import com.example.domain.User; public class UserService { private UserDAO userDAO; public void addUser(User u) { this.userDAO.save(u); } /** * @return the userDAO */ public UserDAO getUserDAO() { return userDAO; } /** * @param userDAO the userDAO to set */ public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } }9.测试:
package com.example.ioc; import com.example.domain.User; import com.example.service.UserService; public class RunIoc { public static void main(String[] args) throws Exception { BeanFactory factory = new ClassPathXmlApplicationContext(); //通过工厂直接获取 UserService userService = (UserService) factory.getBean("userService"); //其实User也可以从工厂中获得 User u = (User) factory.getBean("user"); //User u = new User(); u.setUserName("tom"); u.setPassword("123456"); userService.addUser(u);//打印结果tom123456 } }小结
上文仅仅是简单地模拟了spring的IOC的实现,虽然只是完成了spring中依赖注入的一小部分,但还是很好地展现了Java反射机制在spring中的应用