ApplicationContextAware和BeanFactoryAware获取bean实例
这两个接⼝在项⽬中的使⽤,主要是为了动态获取实例对象,两种场景
第⼀种:获取的实例对象都实现了相同的接⼝或者继承了相同的⽗类,这样就可以实现代码的整洁复⽤;
第⼆种:⽐如⽅法的调⽤,类⾥边的⽅法相互调⽤,如果想使⽤⾃定义注解的话,是不会⽣效的,但是如果借⽤
ApplicationContextAware和BeanFactoryAware接⼝的⽅法实现,则可以让⾃定义注解⽣效,因为重新动态获取了⼀次实例;
使⽤说明:必须保证SpringContextUtil该类被Spring容器管理,不然不会⽣效,会报空指针异常;使⽤注解扫描或者定义bean标签
注⼊;
n(“aController”,)
SpringContextUtil类
publicclassSpringContextUtilimplementsApplicationContextAware{
//Spring应⽤上下⽂环境
privatestaticApplicationContextapplicationContext;
/**
*实现ApplicationContextAware接⼝的回调⽅法,设置上下⽂环境
*/
publicvoidtApplicationContext(ApplicationContextapplicationContext)
throwsBeansException{
ationContext=applicationContext;
}
publicstaticApplicationContextgetApplicationContext(){
returnapplicationContext;
}
/**
*获取对象这⾥重写了bean⽅法,起主要作⽤
*
*@parambeanId
*@returnObject⼀个以所给名字注册的bean的实例
*@throwsBeansException
*/
publicstatic
return(T)n(beanId);
}
/**
*获取对象这⾥重写了bean⽅法,起主要作⽤
*
*@parambeanId
*@returnObject⼀个以所给名字注册的bean的实例
*@throwsBeansException
*/
publicstatic
return(T)n(beanId,beanClass);
}
}
publicclassSpringContextUtilimplementsBeanFactoryAware{
privatestaticBeanFactorybeanFactory;
/**
*实现BeanFactory接⼝的回调⽅法,设置上下⽂环境
*/
@Override
publicvoidtBeanFactory(BeanFactorybeanFactory)throwsBeansException{
ctory=beanFactory;
}
/**
*获取对象这⾥重写了bean⽅法,起主要作⽤
*
*@parambeanId
*@returnObject⼀个以所给名字注册的bean的实例
*@throwsBeansException
*/
publicstatic
return(T)n(beanId);
}
/**
*获取对象这⾥重写了bean⽅法,起主要作⽤
*
*@parambeanId
*@returnObject⼀个以所给名字注册的bean的实例
*@throwsBeansException
*/
publicstatic
return(T)n(beanId,beanClass);
}
}
以下⽅式也可以:
@Resource
privateApplicationContextapplicationContext;
n()
本文发布于:2023-01-03 11:26:31,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/84145.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |