基于spring三方包类注入容器的四种方式小结
如果引用第三方jar包,肯定是不能直接使用常用注解@Controller、@Service、@Repository、@Component将类的实例注入到spring容器中。以下四种方法可以向spring容器中导入三方包中类实例 。

1 xml配置
这种情况大家用的比较多,就是在spring的xml文件中配置需要导入的bean。在springweb项目工程web.xml中 ContextLoaderListener或者DispatcherServlet的初始参数contextConfigLocation指定spring配置文件位置,可以在该配置文件中直接定义bean,或者在该配置文件中import专门配置三方bean的xml文件。springboot工程,可以在启动类上面加注解@ImportResource。@ImportResource注解可以通过value指定需要扫描的xml文件,value是字符串数组可以指定多个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注解有一个类数组类型的属性,类数组中的类有以下四种情况
普通的类名称,该类被注入容器,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实现类,该接口具有一个方法,方法的返回值是字符串数组,每一项是全类名,通过参数AnnotationMetadata可以得到这个被@Import注解修饰类的信息。同样这样注入进来的bean的名称也是全类名,可以返回空数组,不可以返回null。第一种直接写注入类名和使用ImportSelector实现类,都没有办法使用注入类的有参构造方法,bean的名称也没有办法指定,不过只单实例自动注入,不用关心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实现类,该类有个方法可以直接向Application中手动注入bean,我们可以简单定义一个bean然后注入。
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
RootBeanDefinition definition = new RootBeanDefinition(TestFive.class);
registry.registerBeanDefinition("testTive",definition);
}
4 @FactoryBean
FactoryBean可以用来实现代理,原始的代理实现就可以使用ProxyFactoryBean,还有专门用来实现事务代理的TransactionProxyFactoryBean。使用注解和配置的方式和一般bean一样向容器中注入一个FactoryBean的实现类,实际注入的该FactoryBean中getObject方法返回的对象,这个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.实现 ImportBeanDefinitionRegistrar 接口 注入
3.实现 ImportSelector 注入
[color=red][b]直接注入
[/b][/color]
Broker.java(无任何属性和实现)
package com.springBoot.entrance.importBean.direct;
public class Broker {
}
Customer.java(无任何属性和实现)
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三方包类注入容器的四种方式小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
代码知识SEO上一篇 : mysql8.0.20配合binlog2sql的配置和简单备份恢复的步骤详解
下一篇 : python 动态绘制爱心的示例
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!