网站建设与开发的收获与体会seo优化招聘
文章目录
- 1. @Autowired和@Resource的区别
- 2. 一个接口多个实现类的处理
- 2.1 注入时候报错情况
- 2.2 使用@Primary注解处理
- 2.3 使用@Qualifer注解处理
- 2.4 根据业务情况动态的决定注入哪个serviceImpl
1. @Autowired和@Resource的区别
- @Aurowired是根据type来匹配;@Resource可以根据name和type来匹配,默认是name匹配
- @Aurowired是Spring定义的注解,@Resource是JSR250规范里面定义的注解,而Spring对JSR250规范提供了支持。
- @Autowired如果需要支持name匹配,就需要配合@Primary或者@Qualifier注解使用来实现
2. 一个接口多个实现类的处理
public interface FileService {void getFile();
}
@Slf4j
@Service
public class FileServiceAImpl implements FileService {@Overridepublic void getFile() {log.info("调用fileServiceAImpl...");}
}
@Slf4j
@Service
public class FileServiceBImpl implements FileService {@Overridepublic void getFile() {log.info("调用fileServiceBImpl...");}
}
2.1 注入时候报错情况
2.2 使用@Primary注解处理
@Primary表示主要的bean,当存在多个相同类型的Bean的时候,优先使用声明了@Primary的Bean
FileServiceAImpl 类添加@Primary注解:
@Slf4j
@Service
@Primary
public class FileServiceAImpl implements FileService {@Overridepublic void getFile() {log.info("调用fileServiceAImpl...");}
}
2.3 使用@Qualifer注解处理
@Qualifer的作用类似于条件筛选,它可以根据Bean的名字找到需要装备的目标Bean
@Slf4j
@Service("fileServiceAImpl")
public class FileServiceAImpl implements FileService {@Overridepublic void getFile() {log.info("调用fileServiceAImpl...");}
}
@Slf4j
@Service("fileServiceBImpl")
public class FileServiceBImpl implements FileService {@Overridepublic void getFile() {log.info("调用fileServiceBImpl...");}
}
@Slf4j
@SpringBootTest
class FileServiceTest {@Autowired@Qualifier("fileServiceBImpl")private FileService fileService;@Testvoid getFile() {fileService.getFile();}}
2.4 根据业务情况动态的决定注入哪个serviceImpl
使用 ApplicationContext的getBean()方法动态指定需要用到的bean
@Slf4j
@SpringBootTest
class FileServiceTest {@Autowiredprivate ApplicationContext context;@Testvoid getFile() {FileService fileService = getFileService(0);fileService.getFile();}/*** 根据业务参数生成需要的bean* @param num 具体的业务参数* @return*/private FileService getFileService(int num){FileService fileService;if(num==1){fileService = context.getBean("fileServiceBImpl",FileService.class);}else {fileService = context.getBean("fileServiceAImpl",FileService.class);}return fileService;}
}