test测试类:
@Test
public void test1(){
UserService userService = (UserService) applicationContext.getBean("userServiceImpl");//拿到接口
userService.addUser();//拿到userService的实现接口
}
UserService.java:
public interface UserService{
void addUser();
}
走UserService接口实现类的方法
@Service //实例化当前对象,存入Spring容器,以UserServiceImp为名称
public class UserServiceImp implements UserService{
private UserDao userDao;
@Override
public void addUser(){
userDao.addUser();
}
public UserDao getUserDao(){
return userDao;
}
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
}
掉public void addUser()方法。userDao.addUser();在往下走
public interface UserDao{
void addUser();
}
走UserDao接口实现类:
public class UserDaoImp implements UserDao{
@Override
public void addUser(){
System.out.println("Dao层添加数据库");
}
}
首先UserService能打理掉这个addUser()方法的前提就是:UserServiceImp对象通过@Service注释new出来了。但是其中私有属性UserDao并没有new出来。若在application.xml里并没有bean标签(例如<context:component-scan base-packge="com.kgc.service.imp" />),没办法说什么设值注入。这种场景下怎么用注解把UserDao这个属性注入进来?
首先UserDao这个对象得new出来再说userDao的实现类是谁?
@Repository //仓库的意思
//什么意思?就是把UserDaoImp new出来了
public class UserDaoImp implements UserDao{
@Override
public void addUser(){
System.out.println("Dao层添加数据库");
}
}
因为@Service会把UserDaoImp对象存入Spring容器,存入Spring容器之后嘞?
就意味着UserDaoImp这个实现类在容器里面有了
在容器里有了后只要在UserServiceImp.java中需要一个@Autowired注解就可以了
@Service //实例化当前对象,存入Spring容器,以UserServiceImp为名称
public class UserServiceImp implements UserService{
@Autowired
private UserDao userDao;
....
}
*这里只是有test测试类调用举例,在实际开发中也同样适用