public class UserDao{
public void addUser(String username)
{
System.out.println("添加用户:"+username);
}
}
public class UserMessage {
String username="demo";
UserDao userDao;
public UserMessage(){
userDao=new UserDao();
}
public void addUser(){
userDao.addUser(username);
}
}
public class test{
UserMessage userMessage=new UserMessage();
userMessage.addUser();
}
这上面的代码存在一个缺陷,由于在UserMessage内部创建了UseDao对象,这就造成了两个类之间的耦合度较高,当项目经理想要用另外一个Dao类的方法来实现addUser的时候,这个时候我就需要修改User Message的代码,重新new另一个类,如果系统中有一百个地方用到这个类,那我们这些地方都要全部修改,出现Bug的概率将大大增加,然后过了一阵子,项目经理又说我想换回以前的Dao类了……
下面我们看看IOC设计的实现
public interface UserDao{
void addUser(String username);
}
public class UserDaoImpl implements UserDao{
@Override
public void addUser(String username)
{
System.out.println("添加用户:"+username);
}
}
public class UserMessage{
private UserDao userDao;
//使用设值方式赋值
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void addUser(String userName, String password) {
userDao.addUser(userName);
}
}
public class test{
public static void main(String[] args) {
UserDao userDao =new UserDaoImpl();
UserMessage userMessage=new UserMessage();
userMessage.setUserDao(userDao);
}
}
public class test {
public static void main(String[] args) throws Exception {
BeanFactory factory=new XmlBeanFactory(new FileSystemResource("src/appllication.xml"));
UserMessage userMessage=(UserMessage)factory.getBean("UserMessage");
userMessage.add("德玛西亚");
@Configuration
public class UserConfig {
@Bean
public UserDao getUserDao(){
return new UserDao();
}
@Bean
public UserMessage getUserMessage(){
return new UserMesssgae(getUserDao);
}
}