Spring服务定制
问题总述
我们都知道如果使用Spring来进行bean管理的时候。如果同一个接口的实现类存在两个,直接使用@Autowired
注解来实现bean注入,会在启动的时候报异常。我们通常的做法是使用@Resource
注解来执行bean的名称。不过通过@Resource
注解类似于硬编码的方式,如果我们想修改接口的具体实现,必须修改代码。假设我们环境中针对所有接口,都有两套实现,一套在测试环境中使用,一个在生产环境中使用。那么当切换环境的时候,所有接口使用@Resource
注入的地方都需要修改bean名称。
使用@Profile注解
针对前面两套环境的情况,我们可以使用@Profile
注解来轻松解决。具体代码示例如下:
public interface HelloService {
void saySomething(String msg);
}
@Profile("kind1")
@Service
public class HelloServiceImpl1 implements HelloService {
public void saySomething(String msg) {
System.out.println("HelloServiceImpl1 say:" + msg);
}
}
@Profile("kind2")
@Service
public class HelloServiceImpl2 implements HelloService {
public void saySomething(String msg) {
System.out.println("HelloServiceImpl2 say:" + msg);
}
}
@EnableAspectJAutoProxy
@Configurable
@ComponentScan(basePackages="com.rampage.spring")
@EnableScheduling
public class ApplicationConfig {
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=ApplicationConfig.class)
@ActiveProfiles(profiles={"kind1"}) // 启用kind1注入的bean
public class HelloServiceTest {
@Autowired
private HelloService helloService;
@Test
public void testServiceSelector() {
helloService.saySomething("I Love U!");
}
}
最终输出的结果为:
HelloServiceImpl1 say:I Love U!
多服务共存定制
考虑这样一种情况,假设HelloService
是针对全国通用的服务,对于不同的省市使用不同的方言来saySomething
Spring服务定制的更多相关文章
- Spring Boot 定制与优化内置的Tomcat容器
1.Spring Boot定制与优化内置Tomcat容器. > 内置的容器有三个分别是Undertow.Jetty.Tomcat,Spring Boot 对这三个容器分别进行了实现,它们上层接口 ...
- Spring Boot 定制URL匹配规则的方法
事情的起源:有人问我,说编写了一个/hello访问路径,但是吧,不管是输入/hello还是/hello.html,还是/hello.xxx都能进行访问.当时我还以为他对代码进行处理了,后来发现不是,后 ...
- 75. Spring Boot 定制URL匹配规则【从零开始学Spring Boot】
在之前有一篇文章说了,博客名称从原来的<从零开始学Spring Boot>更改为<Spring Boot常见异常汇总>,后来写了几篇文章之后发展,有些文章还是一些知识点,所以后 ...
- Android网络定位服务定制简述
Android 添加高德或百度网络定位服务 Android的网络定位服务以第三方的APK方式提供服务,由于在国内Android原生自带的com.google.android.gms服务几乎处于不可用状 ...
- spring服务定位器类
此文章是基于 搭建SpringMVC+Spring+Hibernate平台 功能:通过持有的Spring应用场景ApplicationContext,可在任何地方获取bean. 1. 服务定位器类:S ...
- webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成
首先到CXF官网及spring官网下载相关jar架包,这个不多说.webservice是干嘛用的也不多说. 入门例子 模拟新增一个用户,并返回新增结果,成功还是失败. 大概的目录如上,很简单. Res ...
- spring boot定制Jackson ObjectMapper,为什么不生效
先说结论: 项目中定制了spring 的redisTemplate,而这个template没有使用我自定义的Jackson ObjectMapper.所以不生效. 下面是详细过程: 起因是spring ...
- Spring Boot定制启动图案
启动图案 Spring Boot在启动的时候会显示一个默认的Spring的图案,对应的类为SpringBootBanner. . ____ _ __ _ _ /\\ / ___'_ __ _ _(_) ...
- C5. Spring 服务的注册与发现(Spring Cloud Eureka)
[概述] Eureka 作为 Spring Cloud 分布式解决方案中重要的一环,实现了服务的注册与发现等功能.Eureka 包括 Eureka Server 和 Eureka Client,具体的 ...
随机推荐
- docker学习笔记(二)
一.常用Linux 命令 ls -a(同时列出隐含文件), -l(输出一个比较完整的格式,除每个文件名外,增加显示文件 类型.权限.硬链接数.所有者名.组名.大小(byte).及时间信息-----简化 ...
- 2018.3.6学习java的第一天
学习java,那么不得不先了解一下java,java分为三部分,JAVA SE,JAVA EE和JAVA ME,其中前期我们首先要学习Java SE.java是一门语言,我们平时人与人之间对话,用中文 ...
- Servlet中forward和redirect的区别(转)
forward方式:request.getRequestDispatcher("/somePage.jsp").forwardrequest, response); red ...
- mysql常用基础操作语法(十二)~~常用数值函数【命令行模式】
数值函数是常用函数之一,也是学习mysql必会的,常用的有如下一些: 1.ceil:返回大于某个数的最小整数值: 2.floor:和上一个相反,返回小于某个数的最大整数值: 3.round:返回某个数 ...
- 高级DirectDraw
使用高彩模式 上一章中说了可以用16位的色彩深度,但是16位的色彩深度的数据表示模式可以有两种:Alpha.5.5.5(or X.5.5.5) 和 5.6.5(这是16位色彩最常用的).对于使用哪种1 ...
- Error:dijit.tree.TreeStoreModel:root query returned 0 items
1.错误描述 error loading root: Tree.js(第341行) Error:dijit.tre ...
- Django学习-24-Ajax
jQuery.Ajax是原生Ajax的封装,它能自动识别浏览器的Ajax对象HttpResponse(status='404',reason='Page Not Found') 原生Ajax使用Xml ...
- hihocoder1388 Periodic Signal
FFT 就可以了 比赛时候没时间做了 #include<bits/stdc++.h> using namespace std; typedef long long ll; const in ...
- 版本控制工具--svn和git的使用(二) -----SVN的操作
SVN的使用 开头: 对于svn的详解,我不是很熟,只是用过svn的客户端,没使用过服务端,在这里我只是简单说一下在svn的客户端怎么拉取代码,提交代码和修改冲突等等.svn的客户端我在Mac中用的s ...
- 通过JDBC连接数据库(MySql为例)并读取数据库信息--JSP基础
1.先建数据库,数据库名为:employee_DB;然后在数据库employee_DB下建表,表名为employee;最后插入数据. create database employee_DB; use ...