最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于spring三方包類注入容器的四種方式小結(jié)

 更新時間:2020年09月27日 09:51:18   作者:luoanjuan  
這篇文章主要介紹了基于spring三方包類注入容器的四種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

如果引用第三方j(luò)ar包,肯定是不能直接使用常用注解@Controller、@Service、@Repository、@Component將類的實例注入到spring容器中。以下四種方法可以向spring容器中導入三方包中類實例 。

1 xml配置

這種情況大家用的比較多,就是在spring的xml文件中配置需要導入的bean。在springweb項目工程web.xml中 ContextLoaderListener或者DispatcherServlet的初始參數(shù)contextConfigLocation指定spring配置文件位置,可以在該配置文件中直接定義bean,或者在該配置文件中import專門配置三方bean的xml文件。springboot工程,可以在啟動類上面加注解@ImportResource。@ImportResource注解可以通過value指定需要掃描的xml文件,value是字符串數(shù)組可以指定多個xml配置文件。

@SpringBootApplication
@ImportResource(value = {"classpath:spring-bean.xml"})
public class DubboOneApplication {
 
  public static void main(String[] args) {
    SpringApplication.run(DubboOneApplication.class, args);
  }
}

2 @Configuration和@Bean

可以通過直接直接向spring容器注入bean。在開啟注解掃描的情況下,在掃描的包路徑中添加具有@Configuration注解的類,在該類的定義返回某個實例的方法,這個方法加上@Bean的注解,那么這個方法的返回值將注入spring容器,這個bean的名稱是這個方法的名稱。

3 @Import

@Import可以直接向容器中導入第三方包中bean。在開啟注解掃描的情況下,可以在有@Controller,@Service,@Component,@Repository,@Configuration注解的類上面添加@Import注解,@Import注解有一個類數(shù)組類型的屬性,類數(shù)組中的類有以下四種情況

普通的類名稱,該類被注入容器,bean名稱是全類名

@SpringBootApplication
@Import({TestTwo.class})
public class DubboOneApplication {
 
  public static void main(String[] args) {
    SpringApplication.run(DubboOneApplication.class, args);
  }
}

具有Configuration作用的類,沒有@Configuration注解,里面定義了具有@Bean注解的方法,例如上面TestTwo中有一個返回TestThree的方法使用了@Bean注解,那么TestThree也會注入進容器,bean名稱就是方法名,和@Configuration注入功能類似。

ImportSelector實現(xiàn)類,該接口具有一個方法,方法的返回值是字符串數(shù)組,每一項是全類名,通過參數(shù)AnnotationMetadata可以得到這個被@Import注解修飾類的信息。同樣這樣注入進來的bean的名稱也是全類名,可以返回空數(shù)組,不可以返回null。第一種直接寫注入類名和使用ImportSelector實現(xiàn)類,都沒有辦法使用注入類的有參構(gòu)造方法,bean的名稱也沒有辦法指定,不過只單實例自動注入,不用關(guān)心bean名稱。

public interface ImportSelector {
 
 /**
 * Select and return the names of which class(es) should be imported based on
 * the {@link AnnotationMetadata} of the importing @{@link Configuration} class.
 */
 String[] selectImports(AnnotationMetadata importingClassMetadata);
 
}

ImportBeanDefinitionRegistrar實現(xiàn)類,該類有個方法可以直接向Application中手動注入bean,我們可以簡單定義一個bean然后注入。

@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
  RootBeanDefinition definition = new RootBeanDefinition(TestFive.class);
  registry.registerBeanDefinition("testTive",definition);
 }

4 @FactoryBean

FactoryBean可以用來實現(xiàn)代理,原始的代理實現(xiàn)就可以使用ProxyFactoryBean,還有專門用來實現(xiàn)事務代理的TransactionProxyFactoryBean。使用注解和配置的方式和一般bean一樣向容器中注入一個FactoryBean的實現(xiàn)類,實際注入的該FactoryBean中g(shù)etObject方法返回的對象,這個bean的名稱還是對應配置或注解中指定的名稱。

@Component("testFive")
public class TestFour implements FactoryBean<TestFive>{
  @Override
  public boolean isSingleton() {
    return true;
  }
 
  @Override
  public TestFive getObject() throws Exception {
    return new TestFive();
  }
 
  @Override
  public Class<?> getObjectType() {
    return TestFive.class;
  }
}

補充知識:Spring Boot @Import注解(將指定類實例注入到IOC容器中)

[color=red][size=large][b]SpringBoot 的 @Import 用于將指定的類實例注入到Spring IOC Container中。[/b][/size][/color] SpringBoot 提供了 三種使用 @Import 將 類實例注入至 Spring IOC Container中 的實例。

1.直接注入

2.實現(xiàn) ImportBeanDefinitionRegistrar 接口 注入

3.實現(xiàn) ImportSelector 注入

[color=red][b]直接注入

[/b][/color]

Broker.java(無任何屬性和實現(xiàn))

package com.springBoot.entrance.importBean.direct;
public class Broker {
}

Customer.java(無任何屬性和實現(xiàn))

package com.springBoot.entrance.importBean.direct;
public class Customer {
}

ImportDirect.java

package com.springBoot.entrance.importBean.direct;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component;

@Component
@Import({Customer.class,Broker.class})
/**
 *使用Import 將指定的類的實例注入至Spring 容器中
 */
public class ImportDirect {

}

[b][color=red]代碼解讀:使用 @Import({Customer.class,Broker.class}) 后 Customer 和 Broker類的實例將會被注入之Spring IOC Container中[/color][/b]

App.java

//import Direct 使用import 直接將指定的類實例注入至Spring 容器中
System.out.println(context.getBean(ImportDirect.class));
System.out.println(context.getBean(Customer.class));
System.out.println(context.getBean(Broker.class));

以上這篇基于spring三方包類注入容器的四種方式小結(jié)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中String的JdbcTemplate連接SQLServer數(shù)據(jù)庫的方法

    Java中String的JdbcTemplate連接SQLServer數(shù)據(jù)庫的方法

    這篇文章主要介紹了Java中String的JdbcTemplate連接SQLServer數(shù)據(jù)庫的方法,在研發(fā)過程中我們需要與其他系統(tǒng)對接的場景,連接SQLServer拉取數(shù)據(jù),所以就用jdbc連接數(shù)據(jù)庫的方式連接外部數(shù)據(jù)源,需要的朋友可以參考下
    2021-10-10
  • java多線程編程實例

    java多線程編程實例

    這篇文章主要介紹了java多線程編程實例,分享了幾則多線程的實例代碼,具有一定參考價值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下。
    2017-11-11
  • java實現(xiàn)簡單的俄羅斯方塊

    java實現(xiàn)簡單的俄羅斯方塊

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單的俄羅斯方塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java中io流解析及代碼實例

    Java中io流解析及代碼實例

    這篇文章主要介紹了Java中io流解析及代碼實例,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • java集成開發(fā)SpringBoot生成接口文檔示例實現(xiàn)

    java集成開發(fā)SpringBoot生成接口文檔示例實現(xiàn)

    這篇文章主要為大家介紹了java集成開發(fā)SpringBoot如何生成接口文檔的示例實現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • SpringBoot集成內(nèi)存數(shù)據(jù)庫H2的實踐

    SpringBoot集成內(nèi)存數(shù)據(jù)庫H2的實踐

    h2是內(nèi)存數(shù)據(jù)庫,查詢高效,可以在開發(fā)初期使用它。本文主要介紹了SpringBoot集成內(nèi)存數(shù)據(jù)庫H2的實踐,具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • MyBatis深入解讀動態(tài)SQL的實現(xiàn)

    MyBatis深入解讀動態(tài)SQL的實現(xiàn)

    動態(tài) SQL 是 MyBatis 的強大特性之一。如果你使用過 JDBC 或其它類似的框架,你應該能理解根據(jù)不同條件拼接 SQL 語句有多痛苦,例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最后一個列名的逗號。利用動態(tài) SQL,可以徹底擺脫這種痛苦
    2022-04-04
  • 徹底理解Spring注解@Autowired實現(xiàn)原理

    徹底理解Spring注解@Autowired實現(xiàn)原理

    這篇文章主要為大家詳細的介紹了Spring注解@Autowired實現(xiàn)的原理,縝密的邏輯分析,實踐應用示例操作說明,讓大家徹底的理解Spring注解@Autowired背后實現(xiàn)原理
    2022-03-03
  • Java實現(xiàn)單鏈表SingleLinkedList增刪改查及反轉(zhuǎn) 逆序等

    Java實現(xiàn)單鏈表SingleLinkedList增刪改查及反轉(zhuǎn) 逆序等

    單鏈表是鏈表的其中一種基本結(jié)構(gòu)。一個最簡單的結(jié)點結(jié)構(gòu)如圖所示,它是構(gòu)成單鏈表的基本結(jié)點結(jié)構(gòu)。在結(jié)點中數(shù)據(jù)域用來存儲數(shù)據(jù)元素,指針域用于指向下一個具有相同結(jié)構(gòu)的結(jié)點。 因為只有一個指針結(jié)點,稱為單鏈表
    2021-10-10
  • SpringBoot啟動訪問localhost:8080報錯404的解決操作

    SpringBoot啟動訪問localhost:8080報錯404的解決操作

    這篇文章主要介紹了SpringBoot啟動訪問localhost:8080報錯404的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10

最新評論

衡山县| 乌拉特中旗| 南丰县| 昌图县| 威宁| 东乌珠穆沁旗| 尚义县| 泰宁县| 郁南县| 岑巩县| 枣强县| 北辰区| 黄骅市| 黄骅市| 鄂州市| 咸丰县| 明水县| 绥滨县| 台东县| 布拖县| 桂林市| 平乡县| 石台县| 高雄市| 福建省| 光山县| 正镶白旗| 类乌齐县| 大田县| 什邡市| 南开区| 甘南县| 集贤县| 大悟县| 栾川县| 邛崃市| 安岳县| 湄潭县| 永川市| 水富县| 瑞丽市|