定义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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)