对外发布接口时,为保证系统的可扩展性要求,实现接口通过参数能动态的调用某个实现类的功能
目录结构:
Appconfig.java
package com.lz.config;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan(basePackages = "com.lz")
public class Appconfig {
}
UserDao.java
package com.lz.dao;
public interface UserDao {
void query();
}
UserADaoImpl.java
package com.lz.dao.impl;
import com.lz.dao.UserDao;
import org.springframework.stereotype.Repository;
@Repository
public class UserADaoImpl implements UserDao {
@Override
public void query() {
System.out.println("------ UserADaoImpl ------ ");
}
}
UserBDaoImpl.java
package com.lz.dao.impl;
import com.lz.dao.UserDao;
import org.springframework.stereotype.Repository;
@Repository
public class UserBDaoImpl implements UserDao {
@Override
public void query() {
System.out.println("------ UserBDaoImpl ------ ");
}
}
UserService.java
package com.lz.service;
public interface UserService {
void query(String m);
}
UserServiceImpl.java
1:通过Map<Type, Interface> map注入
package com.lz.service.impl;
import com.lz.dao.UserDao;
import com.lz.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private Map<String, UserDao> map;
@Override
public void query(String m) {
UserDao userDao = map.get(m);
userDao.query();
}
}
2:实现ApplicationContextAware
package com.lz.service.impl;
import com.lz.dao.UserDao;
import com.lz.service.UserService;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService, ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void query(String m) {
UserDao userDao = (UserDao) applicationContext.getBean(m);
userDao.query();
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
SpringApplication.java
package com.lz;
import com.lz.config.Appconfig;
import com.lz.service.UserService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class SpringApplication {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();
ac.register(Appconfig.class);
ac.refresh();
UserService userService = ac.getBean(UserService.class);
userService.query("userADaoImpl");
userService.query("userBDaoImpl");
}
}