spring註解 @primary
@Primary:意思是在眾多相同的bean中,優先使用用@Primary註解的bean。
1.在多資料來源的時候,使用@Primary註解用於指定其中一個作為主資料來源,即如果資料庫操作沒有指明使用哪個資料來源的時候,預設使用主資料來源,這個時候我們就使用到了@primary這個註解。
在此之前先認識一下@Qualifier、@Bean註解的意思:
@Qualifier:指定某個bean有沒有資格進行注入。
@Bean:用於告訴方法,產生一個Bean物件,然後這個Bean物件交給Spring管理。產生這個Bean物件的方法Spring只會呼叫一次,隨後這個Spring將會將這個Bean物件放在自己的IOC容器中。
在專案中的使用:
@Configuration @MapperScan(basePackages = "com.dunoinfo.jsqxt.estimate.algorithm.repository.oracle", sqlSessionTemplateRef = "oracleSemiSqlSessionTemplate") public class DruidConfig { private Logger logger = LoggerFactory.getLogger(DruidConfig.class); @Bean(name = "oracleSemiDataSource") //宣告其為Bean例項 @ConfigurationProperties("spring.datasource.druid") @Primary //在同樣的DataSource中,首先使用被標註的DataSource public DataSource dataSource() { return DruidDataSourceBuilder.create().build(); } @Bean(name = "oracleSemiSqlSessionFactory") @Primary public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleSemiDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/oracle/semi/*.xml")); return bean.getObject(); } @Bean(name = "oracleSemiSqlSessionTemplate") @Primary public SqlSessionTemplate oracleSqlSessionTemplate(@Qualifier("oracleSemiSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
2.當對同一個介面可能會有幾種不同的實現類時,預設情況下只會採用其中的一種情況,使用@Primary註解來進行宣告優先選擇哪一個。
如下面的一個小例子:
先定義一個Person介面,有一個Study方法:
public interface Person {
public void study(String subject);
}
再給此介面定義兩個子類,其中一個加@Component註解進行宣告,將其例項化到spring容器中;另一個子類不加註解:
@Component public class StudentLi implements Person{ @Override public void study(String subject) { System.out.println("I'm Li Lei. I'm learning "+subject); } }
public class StudentHan implements Person{
@Override
public void study(String subject) {
System.out.println("I'm Han Meimei. I'm learning "+subject);
}
}
注入介面實現類進行測試:
@Controller
@RequestMapping(value = "/primary")
public class TestPrimary {
@Autowired
private Person person;
@RequestMapping(value = "test", method = RequestMethod.GET)
@ResponseBody
public void Test(){
person.study("Chinese");
}
}
輸出結果:I'm Li Lei. I'm learning Chinese
這個結果毫無疑問,因為StudentHan.java這個實現類沒有加@Component註解,無法被加入到spring容器,下面對該實現類新增@Component註解,再進行測試。執行時程式出現異常,由於我們有兩個實現類,spring無法確定注入哪一個。
在StudentHan.java實現類上新增@Primary註解進行宣告,再進行測試。
@Primary
@Component
public class StudentHan implements Person{
@Override
public void study(String subject) {
System.out.println("I'm Han Meimei. I'm learning "+subject);
}
}
輸出結果:I'm Han Meimei. I'm learning Chinese
相關推薦
spring註解 @primary
@Primary:意思是在眾多相同的bean中,優先使用用@Primary註解的bean。 1.在多資料來源的時候,使用@Primary註解用於指定其中一個作為主資料來源,即如果資料庫操作沒有指明使用哪個資料來源的時候,預設使用主資料來源,這個時候我們就使用到了@prima
spring 註解@primary解析
spring中少見的註解@primary註解,例子 @Component public class MetalSinger implements Singer{ @Override public String sing(St
關於@Profile、@Conditional、@Primary、@Qualifier及@Scope等實現高階裝配的spring註解
1、關於@Profile註解的介紹 @Profile註解主要用在針對不同環境而條件選擇的注入bean 在開發過程中由於環境的不同,我們可能在針對某些功能,需要開發不同的實現,然而在某種環境中,只能啟用其中一種實現,其他的實現處於不啟用的狀態。這個時候我們在需要建立的bean上新增@Profi
Spring註解解釋(@Primary、@Qualifier)
@Primary/@Qualifier 當你一個介面的實現類有多個的時候,你通過@Component來註冊你的實現類有多個,但是在注入的時候使用@Autowired 這樣問題就來了,Sp
spring中少用的註解@primary解析
這次看下spring中少見的註解@primary註解,例子 Java程式碼 @Component public class MetalSinger implements Singer{ @Override public String
【Spring註解驅動開發】使用@Autowired@Qualifier@Primary三大註解自動裝配元件,你會了嗎?
## 寫在前面 > 【Spring專題】停更一個多月,期間在更新其他專題的內容,不少小夥伴紛紛留言說:冰河,你【Spring專題】是不是停更了啊!其實並沒有停更,只是中途有很多小夥伴留言說急需學習一些知識技能,以便於跳槽,哈哈,大家都懂得!所以,中途停更了一段時間,寫了一些其他專題的文章。現在,繼續更
spring註解1
XML itcast autowire spa cast encoding ans 測試 目錄 1. src下目錄結構如下: 2.測試類 public class App { // 創建容器對象 private ApplicationContext ac = ne
spring註解使用介紹
print sqlite 測試 www oca oid pat 不知道 text 註解註入顧名思義就是通過註解來實現註入,Spring和註入相關的常見註解有Autowired、Resource、Qualifier、Service、Controller、Repository、
Spring註解註入
path qualifier tpms @value scope 會話 數據類型 rep person 在使用註解前必須對Spring容器進行頭文件導入和配置上下文環境。 1 <?xml version="1.0" encoding="UTF-8"?>
Spring註解詳細
組件 ostc use stc 註入 pac 管理 類名 初始 [email protected]/* */ 控制器(註入服務) [email protected]/* */ 服務(註入dao) [email protected]/* *
JAVAEE——SSH項目實戰06:統計信息管理、Spring註解開發和EasyUI
disabled path -a ted efault pen ret 發送 tran 作者: kent鵬 轉載請註明出處: http://www.cnblogs.com/xieyupeng/p/7190925.html 一、統計信息管理 二、Spring
spring註解使用
spring一、使用註解前,在配置文件中,引入context命名空間xmlns:context=http://www.springframework.org/schema/context xsi:schemaLocation="http://www.springframework.org/schema/bea
spring註解和增強
value pac bsp spring註解 www. framework spring val 註解 1.添加xsd約束 xmlns:context="http://www.springframework.org/schema/context" http://w
Spring註解Annotion——2017.08.27
pos cnblogs 我們 XML brush not 作用 ice ann 1 Spring中註解起的作用 前提是要在xml配置文件中 <context:compoent-scan base-package="cn.itcast"> &
eclipse-搭建maven的war項目集合spring註解方式
eap 初始化 打印 owin artifact mapping line welcom b- 工具:eclipse 4.4.2 版本號:20150219-0600 jdk:1.7 1.下圖創建maven工程,然後next 下圖選擇工程保存位置(這裏選擇默認),nex
spring註解預覽
number 如果 ada 調用 over ati rri autowired 一個 從Java5.0開始,Java開始支持註解。Spring做為Java生態中的領軍框架,從2.5版本後也開始支持註解。相比起之前使用xml來配置Spring框架,使用註解提供了更多的控制Sp
關於Spring註解
地址 eight 多個 共享 factory wid orm 操作 獲取url 整理自網上: AnnotationPackage Detail/Import statement @Service import org.spring
Spring註解
xml文件 onf ons use j2ee resource ota commons pac 1.@Autowired (這個是Spring自帶的,需要在.xml文件中配上 <context:annotation-config />)不過Spring2.5
Spring Boot 動態數據源(Spring 註解數據源)
sample maximum 多個 prefix password auth 映射 boot 發出 本文實現案例場景:某系統除了需要從自己的主要數據庫上讀取和管理數據外,還有一部分業務涉及到其他多個數據庫,要求可以在任何方法上可以靈活指定具體要操作的
Spring 註解學習筆記
list tty ping mode source sse mage 告訴 profile 聲明Bean的註解: @Component : 組件,沒有明確的角色 @Service : 在業務邏輯層(service層)使用 @Repository : 在數據訪問層(