怎么根据spring的beanName获取bean的作用域scope

怎么根据spring的beanName获取bean的作用域scope,第1张

定义Bean

Bean名称由BeanNameGenerator生成(@Component,@Controller,@Service,@Repository都有个name属性用于显示的指定Bean Name;默认是类名首字母小写)

也可使用<context:component-scan/>中的name-generator自定义Bean的命名策略,但是要实现BeanNameGenerator接口并且包含一个无参构造器

作用域

@Scope注解标识Bean的作用域。默认是singleton。

实例

1项目结构

2pomxml

+ View Code

3spring-beanannotationxml

+ View Code

4BeanAnnotationjava

+ View Code

5TestBasejava

+ View Code

6TestBeanAnnotationjava

+ View Code

7效果预览

配置文件中加入:

Xml代码

用于持有ApplicationContext,可以使用SpringContextHoldergetBean('xxxx')的静态方法得到spring

bean对象

Java代码

import

orgspringframeworkcontextApplicationContext;

import

orgspringframeworkcontextApplicationContextAware;

/

以静态变量保存Spring

ApplicationContext,

可在任何代码任何地方任何时候中取出ApplicaitonContext

/

public

class

SpringContextHolder

implements

ApplicationContextAware

{

private

static

ApplicationContext

applicationContext;

/

实现ApplicationContextAware接口的context注入函数,

将其存入静态变量

/

public

void

setApplicationContext(ApplicationContext

applicationContext)

{

SpringContextHolderapplicationContext

=

applicationContext;

//

NOSONAR

}

/

取得存储在静态变量中的ApplicationContext

/

public

static

ApplicationContext

getApplicationContext()

{

checkApplicationContext();

return

applicationContext;

}

/

从静态变量ApplicationContext中取得Bean,

自动转型为所赋值对象的类型

/

@SuppressWarnings("unchecked")

public

static

T

getBean(String

name)

{

checkApplicationContext();

return

(T)

applicationContextgetBean(name);

}

/

从静态变量ApplicationContext中取得Bean,

自动转型为所赋值对象的类型

/

@SuppressWarnings("unchecked")

public

static

T

getBean(Class

clazz)

{

checkApplicationContext();

return

(T)

applicationContextgetBeansOfType(clazz);

}

/

清除applicationContext静态变量

/

public

static

void

cleanApplicationContext()

{

applicationContext

=

null;

}

private

static

void

checkApplicationContext()

{

if

(applicationContext

==

null)

{

throw

new

IllegalStateException("applicaitonContext未注入,请在applicationContextxml中定义SpringContextHolder");

}

}

}

通过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 =�0�2�0�2 WebApplicationContextUtilsgetWebApplicationContext(ServletContext sc);

其中 servletContext sc 可以具体 换成 servletgetServletContext()或者 thisgetServletContext() 或者 requestgetSession()getServletContext();

另外,由于spring是注入的对象放在ServletContext中的,所以可以直接在ServletContext取出WebApplicationContext 对象:

以上就是关于怎么根据spring的beanName获取bean的作用域scope全部的内容,包括:怎么根据spring的beanName获取bean的作用域scope、如何取得Spring管理的bean、Spring如何获取Bean等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存