欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1 xml配置

這種情況大家用的比較多,就是在spring的xml文件中配置需要導(dǎo)入的bean。在springweb項(xiàng)目工程web.xml中 ContextLoaderListener或者DispatcherServlet的初始參數(shù)contextConfigLocation指定spring配置文件位置,可以在該配置文件中直接定義bean,或者在該配置文件中import專(zhuān)門(mén)配置三方bean的xml文件。springboot工程,可以在啟動(dòng)類(lèi)上面加注解@ImportResource。@ImportResource注解可以通過(guò)value指定需要掃描的xml文件,value是字符串?dāng)?shù)組可以指定多個(gè)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

可以通過(guò)直接直接向spring容器注入bean。在開(kāi)啟注解掃描的情況下,在掃描的包路徑中添加具有@Configuration注解的類(lèi),在該類(lèi)的定義返回某個(gè)實(shí)例的方法,這個(gè)方法加上@Bean的注解,那么這個(gè)方法的返回值將注入spring容器,這個(gè)bean的名稱(chēng)是這個(gè)方法的名稱(chēng)。

3 @Import

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

普通的類(lèi)名稱(chēng),該類(lèi)被注入容器,bean名稱(chēng)是全類(lèi)名

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

具有Configuration作用的類(lèi),沒(méi)有@Configuration注解,里面定義了具有@Bean注解的方法,例如上面TestTwo中有一個(gè)返回TestThree的方法使用了@Bean注解,那么TestThree也會(huì)注入進(jìn)容器,bean名稱(chēng)就是方法名,和@Configuration注入功能類(lèi)似。

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

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實(shí)現(xiàn)類(lèi),該類(lèi)有個(gè)方法可以直接向Application中手動(dòng)注入bean,我們可以簡(jiǎn)單定義一個(gè)bean然后注入。

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

4 @FactoryBean

FactoryBean可以用來(lái)實(shí)現(xiàn)代理,原始的代理實(shí)現(xiàn)就可以使用ProxyFactoryBean,還有專(zhuān)門(mén)用來(lái)實(shí)現(xiàn)事務(wù)代理的TransactionProxyFactoryBean。使用注解和配置的方式和一般bean一樣向容器中注入一個(gè)FactoryBean的實(shí)現(xiàn)類(lèi),實(shí)際注入的該FactoryBean中g(shù)etObject方法返回的對(duì)象,這個(gè)bean的名稱(chēng)還是對(duì)應(yīng)配置或注解中指定的名稱(chēng)。

@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;
  }
}

補(bǔ)充知識(shí):Spring Boot @Import注解(將指定類(lèi)實(shí)例注入到IOC容器中)

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

1.直接注入

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

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

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

[/b][/color]

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

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

Customer.java(無(wú)任何屬性和實(shí)現(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 將指定的類(lèi)的實(shí)例注入至Spring 容器中
 */
public class ImportDirect {

}

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

App.java

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

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

相關(guān)文章

  • SpringBoot Actuator潛在的OOM問(wèn)題的解決

    SpringBoot Actuator潛在的OOM問(wèn)題的解決

    本文主要介紹了SpringBoot Actuator潛在的OOM問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 實(shí)例詳解Java實(shí)現(xiàn)圖片與base64字符串之間的轉(zhuǎn)換

    實(shí)例詳解Java實(shí)現(xiàn)圖片與base64字符串之間的轉(zhuǎn)換

    這篇文章主要介紹了Java實(shí)現(xiàn)圖片與base64字符串之間的轉(zhuǎn)換實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2016-12-12
  • Java實(shí)現(xiàn)順序表的增刪查改功能

    Java實(shí)現(xiàn)順序表的增刪查改功能

    這篇文章主要介紹了Java實(shí)現(xiàn)順序表的增刪查改功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • java 多線(xiàn)程饑餓現(xiàn)象的問(wèn)題解決方法

    java 多線(xiàn)程饑餓現(xiàn)象的問(wèn)題解決方法

    這篇文章主要介紹了java 多線(xiàn)程饑餓現(xiàn)象的問(wèn)題解決方法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Spark使用IDEA編寫(xiě)wordcount的示例演示

    Spark使用IDEA編寫(xiě)wordcount的示例演示

    這篇文章主要介紹了Spark使用IDEA編寫(xiě)wordcount的示例演示,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 最新評(píng)論