如何在线程中获取spring 管理的bean

如何在线程中获取spring 管理的bean,第1张

只要搜一下“获取 spring bean”,获取spring bean的N中方法都出来了。线程中获取和普通类中获取方法是一样的。

下面是一种方法。这个类需要配置在Spring中。

使用的时候直接:Bean bean = SpringUtilgetBean("bean的id", Beanclass);//Beanclass是bean的类对象,比如获取 UserService的bean,就是:

1

UserService us = SpringUtilgetBean("userService", UserServiceclass);

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

import orgspringframeworkbeansBeansException;

import orgspringframeworkcontextApplicationContext;

import orgspringframeworkcontextApplicationContextAware;

/

Spring IOC上下文工具类

@ClassName: SpringUtil

@Description:

@author

@date 2014-6-21 下午02:06:48

/

public class SpringUtil implements ApplicationContextAware {

/

当前IOC

/

private static ApplicationContext applicationContext;

/

设置当前上下文环境,此方法由spring自动装配

/

public void setApplicationContext(ApplicationContext arg0)

throws BeansException {

applicationContext = arg0;

}

/

从当前IOC获取bean

@param id

bean的id

@return

/

public static <T> T getBean(String id, Class<T> requiredType) {

T t = applicationContextgetBean(id, requiredType);

return t;

}

}

ApplicationContext context=new ClassPathXmlApplicationContext("applicationContextxml");//获取配置文件信息

Test1 test1=(Test1) contextgetBean("t1");//根据bean的id获得bean

test1show(test1getName(), test1getSex());

也可以用注解获取

@Resource //先按属性名查找 如果没有 再按属性类型查找

//以下两种注解 需要有setter 方法

@Autowired//按类型查找

@Qualifier("beanName")//按名字查找

private BizCheckResultDao bizCheckResultDao;

不用配置xml,直接java代码实现,参考代码如下:public class GetApplicationContext {private static class ApplicationContextHolder {// 单例变量private static ApplicationContext AC = new FileSystemXmlApplicationContext("classpath:applicationContextxml");}// 私有化的构造方法,保证外部的类不能通过构造器来实例化。private GetApplicationContext() {}// 获取单例对象实例public static ApplicationContext getInstance() {if (ApplicationContextHolderAC == null) {ApplicationContextHolderAC = new FileSystemXmlApplicationContext("classpath:applicationContextxml");}return ApplicationContextHolderAC;}}获取所有spring自动装配的bean://获取spring装配的bean个数GetApplicationContextgetInstance()getBeanDefinitionNames()length;//逐个打印出spring自动装配的bean。根据我的测试,类名第一个字母小写即bean的名字for(int i=0;i<33;i++){Systemoutprintln( GetApplicationContextgetInstance()getBeanDefinitionNames()[i]);}然后通过下面的代码获取到spring注解装配的bean供自己使用:StorageReturnService ossService = (StorageReturnService) GetApplicationContextgetInstance()getBean("storageReturnServiceImpl");怎样获取 spring 已经注解的bean

BeanFactory允许InputStream作为构造函数的参数,也可以orgspringframeworkcoreioResource接口。下面这个例子是用ClassPathResource作为参数:

Resource resource = new ClassPathResource("beanxml");

BeanFactory factory = new XmlBeanFactory(resource);

ActionBean action = (ActionBean) factorygetBean("actionBean");

如果同一个Bean在配置文件有多个bean的定义,则用下面的方法取得所有的对象:

Resource resource = new ClassPathResource("beanxml");

ListableBeanFactory factory = new XmlBeanFactory(resource);

Map helloBeans = factorygetBeansOfType(ActionBeanclass, false, false);

不用配置xml,直接java代码实现,参考代码如下:

public class GetApplicationContext {

private static class ApplicationContextHolder {

// 单例变量

private static ApplicationContext AC = new FileSystemXmlApplicationContext(

"classpath:applicationContextxml");

}

// 私有化的构造方法,保证外部的类不能通过构造器来实例化。

private GetApplicationContext() {

}

// 获取单例对象实例

public static ApplicationContext getInstance() {

if (ApplicationContextHolderAC == null) {

ApplicationContextHolderAC = new FileSystemXmlApplicationContext(

"classpath:applicationContextxml");

}

return ApplicationContextHolderAC;

}

}

获取所有spring自动装配的bean:

<span style="font-size:18px;">//获取spring装配的bean个数

GetApplicationContextgetInstance()getBeanDefinitionNames()length;

//逐个打印出spring自动装配的bean。根据我的测试,类名第一个字母小写即bean的名字

for(int i=0;i<33;i++){

Systemoutprintln( GetApplicationContextgetInstance()getBeanDefinitionNames()[i]);

}</span>

然后通过下面的代码获取到spring注解装配的bean供自己使用:

<span style="font-size:18px;">StorageReturnService ossService = (StorageReturnService) GetApplicationContextgetInstance()getBean("storageReturnServiceImpl");</span>

通过xml配置文件 bean配置在xml里面,spring提供多种方式读取配置文件得到ApplicationContext 第一种方式:FileSystemXmlApplicationContext 通过程序在初始化的时候,导入Bean配置文件,然后得到Bean实例: ApplicationContext ac = new FileSystemXmlApplicationContext(applicationContextxml) acgetBean(beanName); 第二种方式:WebApplicationContextUtil 在B/S系统中,通常在webxml初始化bean的配置文件,然后由WebAppliCationContextUtil得到ApplicationContext例如: ApplicationContext ctx = WebApplicationContextUtilsgetRequiredWebApplicationContext(ServletContext sc); ApplicationContext ctx =

通过bring程序获取。

最近项目中遇到一个业务场景,就是在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象,第一个想到的ApplicationContextAware,在setApplicationContext中去通过ctx获取所有的bean。

后来发现好像逻辑不对,这个方法不是在所有bean初始化完成后实现的,后来试了一下看看有没有什么Listener之类的,发现了好东西ApplicationListener,然后百度一下ApplicationListener用法。

以上就是关于如何在线程中获取spring 管理的bean全部的内容,包括:如何在线程中获取spring 管理的bean、如何取得Spring管理的bean、怎样获取 spring 已经注解的bean等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9420872.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存