按照平时的习惯,创建spring项目
dao中:
//User:
public interface User {
void getUer();
}
//UserImpl
public class UserImpl implements User {
@Override
public void getUer() {
System.out.println("user impl");
}
}
//StudentImpl
public class StudentImpl implements User{
@Override
public void getUer() {
System.out.println("Student Impl");
}
}
//TeacherImpl
public class TeacherImpl implements User{
@Override
public void getUer() {
System.out.println("Teacher Impl");
}
}
service中
//UserService
public interface UserService {
void getUser();
}
//UserServiceImp
public class UserServiceImpl implements UserService{
private User user=new UserImpl();
@Override
public void getUser() {
user.getUer();
}
}
当在测试代码中测试时,想要获得StudentImpl、TeacherImpl中的信息时只有通过修改源代码来获得,很不方便。
有一种方法就是通过set的方法:
//UserService:
public interface UserService {
void getUser();
void setUser(User user);
}
//UserServiceImpl
public class UserServiceImpl implements UserService{
private User user;
public void setUser(User user){
this.user=user;
}
@Override
public void getUser() {
user.getUer();
}
}
在测试代码中:
UserService userService = new UserServiceImpl();
userService.setUser(new TeacherImpl());
userService.getUser();
通过set的方法可以自己来new一个对象,不需要通过修改源码的方式。
使用IOC:
就是通过不使用new对象的方式来实现多态,也不需要set的方法
在resource文件下创建Spring Config文件:
<?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.xsd">
<bean id="user" class="org.example.dao.UserImpl"></bean>
<bean id="student" class="org.example.dao.StudentImpl"></bean>
</beans>
id代表的就是 对象名
class表示对应的实现类的位置
在测试代码中:
//bean.xml代表的resource文件夹下的xml文件
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
//使用getBean的方法得到对象
User user = (User) context.getBean("student");
user.getUer();