当前位置: 首页 > news >正文

一键创建网站2345网址导航怎么彻底删掉

一键创建网站,2345网址导航怎么彻底删掉,供应商管理平台,网站 工作室 建设 方案目录 一、BeanFactory与ApplicationContext的区别 二、通过BeanFactory获取 三、通过BeanFactoryAware获取 四、启动获取ApplicationContext 五、通过继承ApplicationObjectSupport 六、通过继承WebApplicationObjectSupport 七、通过WebApplicationContextUtils 八、通…

目录

一、BeanFactory与ApplicationContext的区别

二、通过BeanFactory获取

三、通过BeanFactoryAware获取

四、启动获取ApplicationContext

五、通过继承ApplicationObjectSupport

六、通过继承WebApplicationObjectSupport

七、通过WebApplicationContextUtils

八、通过ApplicationContextAware

九、通过ContextLoader

十、通过BeanFactoryPostProcessor

十一、通过工具类获取


一、BeanFactory与ApplicationContext的区别

BeanFactory是Spring框架的基础设施,面向Spring本身。ApplicationContext则面向使用Spring框架的开发者,几乎所有的应用场景都可以直接使用ApplicationContext,而非底层的BeanFactory。

ApplicationContext的初始化和BeanFactory有一个重大的区别:

BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例目标Bean。这样,我们就不能发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常。

而ApplicationContext则在初始化应用上下文时就实例化所有单实例的Bean,相对应的,ApplicationContext的初始化时间会比BeanFactory长一些。

二、通过BeanFactory获取

通过BeanFactory来获取Bean。

基于xml配置文件:(不推荐使用)

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));User user = (User) beanFactory.getBean("user");
三、通过BeanFactoryAware获取

获取BeanFactory实例最简单的方式就是实现BeanFactoryAware接口。

BeanFactoryAware接口源码:

public interface BeanFactoryAware extends Aware {
?/**
??* 初始化回调方法,Spring会自动将BeanFactory注入进去,接收之后即可使用BeanFactory
??*/
?void setBeanFactory(BeanFactory beanFactory) throws BeansException;
}

BeanFactoryAware属于org.springframework.beans.factory.Aware根标记接口,使用setter注入来在应用程序上下文启动期间获取对象。Aware接口是回调,监听器和观察者设计模式的混合,它表示Bean有资格通过回调方式被Spring容器通知。

示例如下:

@Component
public class BeanFactoryHelper implements BeanFactoryAware {?private static BeanFactory beanFactory;?/**
??* 重写 BeanFactoryAware 接口的方法
??* @param beanFactory :参数赋值给本地属性之后即可使用 BeanFactory
??* @throws BeansException BeansException
??*/
?@Override
?public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
??BeanFactoryHelper.beanFactory = beanFactory;
?}?/**
??* 根据名称获取容器中的对象实例
??* @param beanName :注入的实例必须已经存在容器中,否则抛异常:NoSuchBeanDefinitionException
??* @return Object
??*/
?public static Object getBean(String beanName) {
??return beanFactory.getBean(beanName);
?}?/**
??* 根据 class 获取容器中的对象实例
??* @param requiredType :被注入的必须已经存在容器中,否则抛异常:NoSuchBeanDefinitionException
??* @param <T> Class
??* @return 对象
??*/
?public static <T> T getBean(Class<T> requiredType) {
??return beanFactory.getBean(requiredType);
?}?/**
??* 判断 spring 容器中是否包含指定名称的对象
??* @param beanName bean名称
??* @return 是否存在
??*/
?public static boolean containsBean(String beanName) {
??return beanFactory.containsBean(beanName);
?}?//其它需求皆可参考 BeanFactory 接口和它的实现类}

上述基于BeanFactoryAware的特性,获得了BeanFactory,然后再通过BeanFactory来获得指定的Bean。

四、启动获取ApplicationContext

在项目启动时先获取ApplicationContext对象,然后将其存储在一个地方,以便后续用到时进行使用。

这里提供两种场景的获取:

1.基于xml配置bean的形式,适用于比较古老的项目,已经很少使用了;

2.基于SpringBoot启动时获取ApplicationContext对象;

基于xml的形式实现:

// 其中applicationContext.xml 为配置容器的xml,不过现在一般很少使用了
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");

基于SpringBoot启动实现:

@SpringBootApplication
public class ExampleApplication {????public static void main(String[] args) {
????????// 启动时,保存上下文,并保存为静态
????????ConfigurableApplicationContext ac = SpringApplication.run(ExampleApplication.class, args);
????????SpringContextUtil.setApplicationContext(ac);
????}
}

对应的SpringContextUtil类如下:

public class SpringContextUtil1 {????private static ApplicationContext ac;????public static <T>? T getBean(String beanName, Class<T> clazz) {
????????T bean = ac.getBean(beanName, clazz);
????????return bean;
????}????public static void setApplicationContext(ApplicationContext applicationContext){
????????ac = applicationContext;
????}}
五、通过继承ApplicationObjectSupport

此种方式依旧是先获得ApplicationContext容器,然后从中获取Bean对象,只不过是基于继承ApplicationObjectSupport类实现的。

具体实现代码:SpringContextUtil类需要实例化。

@Component
public class SpringContextUtil extends ApplicationObjectSupport {?public <T> T getBean(Class<T> clazz) {
??ApplicationContext ac = getApplicationContext();
??if(ac == null){
???return null;
??}
??return ac.getBean(clazz);
?}
}

ApplicationObjectSupport类图入下,我们看到它实现了ApplicationContextAware接口,在Spring容器初始化过程中回调方法setApplicationContext来完成ApplicationContext的赋值。

六、通过继承WebApplicationObjectSupport

WebApplicationObjectSupport是ApplicationObjectSupport的一个实现类,提供了Web相关的支持。实现原理与ApplicationObjectSupport一样。

具体实现代码如下:

@Component
public class SpringContextUtil extends WebApplicationObjectSupport {?public <T> T getBean(Class<T> clazz) {
??ApplicationContext ac = getApplicationContext();
??if(ac == null)
???return null;
??}
??return ac.getBean(clazz);
?}
}

通过类图我们可以看到它是ApplicationObjectSupport的实现子类,此方式除了继承对象不同外,没有其他区别,都是基于getApplicationContext方法来获取。

七、通过WebApplicationContextUtils

Spring提供了工具类WebApplicationContextUtils,通过该类可获取WebApplicationContext对象。

具体实现代码如下:

public class SpringContextUtil2 {?public static <T> T getBean(ServletContext request, String name, Class<T> clazz){
??WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request);
??// 或者
??WebApplicationContext webApplicationContext1 = WebApplicationContextUtils.getWebApplicationContext(request);
//??????? webApplicationContext1.getBean(name, clazz)??T bean = webApplicationContext.getBean(name, clazz);
??return bean;
?}
}

这个方法很常见于SpringMVC构建的Web项目中,适用于Web项目的B/S结构。

八、通过ApplicationContextAware

通过实现ApplicationContextAware接口,在Spring容器启动时将ApplicationContext注入进去,从而获取ApplicationContext对象,这种方法也是常见的获取Bean的一种方式,推荐使用。

具体实现代码如下:

@Component
public class SpringContextUtil3 implements ApplicationContextAware {?private static ApplicationContext ac;?@Override
?public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
??ac = applicationContext;
?}?public static <T> T getBean(Class<T> clazz) {
??T bean = ac.getBean(clazz);
??return bean;
?}}
九、通过ContextLoader

使用ContextLoader提供的getCurrentWebApplicationContext方法,也是常用的获取WebApplicationContext的一种方法。

具体实现代码如下:

WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
wac.getBean(beanID);

该方法常见于SpringMVC实现的Web项目中。该方式是一种不依赖于Servlet,不需要注入的方式。但是需要注意一点,在服务器启动时和Spring容器初始化时,不能通过该方法获取Spring容器。

十、通过BeanFactoryPostProcessor

Spring工具类,方便在非Spring管理环境中获取Bean。

@Component
public final class SpringUtils implements BeanFactoryPostProcessor{????/** Spring应用上下文环境 */
????private static ConfigurableListableBeanFactory beanFactory;????@Override
????public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException{
????????SpringUtilsS.beanFactory = beanFactory;
????}????/**
?????* 获取对象
?????*
?????* @param name
?????* @return Object 一个以所给名字注册的bean的实例
?????* @throws BeansException
?????*
?????*/
????@SuppressWarnings("unchecked")
????public static <T> T getBean(String name) throws BeansException{
????????return (T) beanFactory.getBean(name);
????}????/**
?????* 获取类型为requiredType的对象
?????*
?????* @param clz
?????* @return
?????* @throws BeansException
?????*
?????*/
????public static <T> T getBean(Class<T> clz) throws BeansException{
????????T result = (T) beanFactory.getBean(clz);
????????return result;
????}????/**
?????* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
?????*
?????* @param name
?????* @return boolean
?????*/
????public static boolean containsBean(String name){
????????return beanFactory.containsBean(name);
????}????/**
?????* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
?????*
?????* @param name
?????* @return boolean
?????* @throws NoSuchBeanDefinitionException
?????*
?????*/
????public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException{
????????return beanFactory.isSingleton(name);
????}????/**
?????* @param name
?????* @return Class 注册对象的类型
?????* @throws NoSuchBeanDefinitionException
?????*
?????*/
????public static Class<?> getType(String name) throws NoSuchBeanDefinitionException{
????????return beanFactory.getType(name);
????}????/**
?????* 如果给定的bean名字在bean定义中有别名,则返回这些别名
?????*
?????* @param name
?????* @return
?????* @throws NoSuchBeanDefinitionException
?????*
?????*/
????public static String[] getAliases(String name) throws NoSuchBeanDefinitionException{
????????return beanFactory.getAliases(name);
????}????/**
?????* 获取aop代理对象
?????*
?????* @param invoker
?????* @return
?????*/
????@SuppressWarnings("unchecked")
????public static <T> T getAopProxy(T invoker){
????????return (T) AopContext.currentProxy();
????}}

其中ConfigurableListableBeanFactory接口,也属于BeanFactory的子接口。

十一、通过工具类获取
  • RequestContextUtils.findWebApplicationContext(HttpServletRequest request)
  • WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)

controller中获取:

public String test(HttpServletRequest request,HttpServletRequest response) {WebApplicationContext wc = RequestContextUtils.findWebApplicationContext(request);wc.getBean("beanName");WebApplicationContext wc2 = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());wc2.getBean("beanName");
}

在service中或者其他后端服务中获取:

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
WebApplicationContext wc = RequestContextUtils.findWebApplicationContext(request);
WebApplicationContext wc2 = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());wc.getBean("beanName");
wc2.getBean("beanName");

文章转载自:
http://dinncobolognese.bpmz.cn
http://dinncomalformation.bpmz.cn
http://dinncovicara.bpmz.cn
http://dinncomastopathy.bpmz.cn
http://dinncounaccepted.bpmz.cn
http://dinncouncourteous.bpmz.cn
http://dinnconamaqua.bpmz.cn
http://dinncodevilish.bpmz.cn
http://dinncocounterview.bpmz.cn
http://dinncoseasickness.bpmz.cn
http://dinncomultiwindow.bpmz.cn
http://dinncogalvanotaxis.bpmz.cn
http://dinncocolidar.bpmz.cn
http://dinncosennet.bpmz.cn
http://dinncosupplemental.bpmz.cn
http://dinncobay.bpmz.cn
http://dinncodisembodied.bpmz.cn
http://dinncosparely.bpmz.cn
http://dinncoacquisitively.bpmz.cn
http://dinncoratbaggery.bpmz.cn
http://dinncococa.bpmz.cn
http://dinncomanners.bpmz.cn
http://dinncomodacrylic.bpmz.cn
http://dinncochristadelphian.bpmz.cn
http://dinncodisabled.bpmz.cn
http://dinncodeterminative.bpmz.cn
http://dinncosweetbread.bpmz.cn
http://dinncosubstituent.bpmz.cn
http://dinncodesegregation.bpmz.cn
http://dinncorutile.bpmz.cn
http://dinncoseismological.bpmz.cn
http://dinncovarnish.bpmz.cn
http://dinncocountdown.bpmz.cn
http://dinncodigametic.bpmz.cn
http://dinncopharyngonasal.bpmz.cn
http://dinncoenfranchise.bpmz.cn
http://dinncovulnerable.bpmz.cn
http://dinncopowerpoint.bpmz.cn
http://dinncobow.bpmz.cn
http://dinncopilocarpin.bpmz.cn
http://dinncobovril.bpmz.cn
http://dinncoattar.bpmz.cn
http://dinncotherapeutic.bpmz.cn
http://dinncolimmer.bpmz.cn
http://dinncomaurice.bpmz.cn
http://dinncocose.bpmz.cn
http://dinncopragmatistic.bpmz.cn
http://dinncoredout.bpmz.cn
http://dinncopaging.bpmz.cn
http://dinncospadish.bpmz.cn
http://dinncocentreless.bpmz.cn
http://dinncofumaric.bpmz.cn
http://dinncoheadlong.bpmz.cn
http://dinncoinjurant.bpmz.cn
http://dinncounannealed.bpmz.cn
http://dinncofurrin.bpmz.cn
http://dinncooverdue.bpmz.cn
http://dinnconauch.bpmz.cn
http://dinncocleavable.bpmz.cn
http://dinncotrigo.bpmz.cn
http://dinncoanglicanism.bpmz.cn
http://dinncopathophysiology.bpmz.cn
http://dinncooccidentally.bpmz.cn
http://dinncoarchdiocese.bpmz.cn
http://dinncomaduro.bpmz.cn
http://dinncogalaxy.bpmz.cn
http://dinncolaryngitis.bpmz.cn
http://dinncoparmentier.bpmz.cn
http://dinncoillogically.bpmz.cn
http://dinncoscoline.bpmz.cn
http://dinncocurriculum.bpmz.cn
http://dinncopublicist.bpmz.cn
http://dinncoafrikanerdom.bpmz.cn
http://dinncobaseness.bpmz.cn
http://dinncoincurrence.bpmz.cn
http://dinncosarcomatoid.bpmz.cn
http://dinncosolitaire.bpmz.cn
http://dinncowesting.bpmz.cn
http://dinncofenestrate.bpmz.cn
http://dinncosouterrain.bpmz.cn
http://dinncoincuse.bpmz.cn
http://dinncobacat.bpmz.cn
http://dinncolickspittle.bpmz.cn
http://dinncohexapla.bpmz.cn
http://dinncofoiling.bpmz.cn
http://dinncomorgen.bpmz.cn
http://dinncoyosemite.bpmz.cn
http://dinncofesta.bpmz.cn
http://dinncotoothlet.bpmz.cn
http://dinncoechocardiography.bpmz.cn
http://dinncolampoon.bpmz.cn
http://dinncolain.bpmz.cn
http://dinncowaterguard.bpmz.cn
http://dinncomercantilism.bpmz.cn
http://dinncoplume.bpmz.cn
http://dinncoslunk.bpmz.cn
http://dinncoservient.bpmz.cn
http://dinncoureter.bpmz.cn
http://dinncostablish.bpmz.cn
http://dinncoclit.bpmz.cn
http://www.dinnco.com/news/155725.html

相关文章:

  • 正规网络推广服务常见的系统优化软件
  • 四川微信网站建设公百度搜索推广的五大优势
  • 网站seo文章山西seo基础教程
  • asp网站做文件共享上传深圳seo推广
  • 东莞网站开发多少钱网络营销策划方案3000字
  • 哪个网站可以做店招店标轮播温州seo服务
  • 网站建设策划文案上海培训机构排名
  • 綦江建站哪家正规项目推广平台有哪些
  • 武汉开发网站建设网络优化seo薪酬
  • 红色政府网站模板 dede女排联赛最新排行榜
  • 投资网站维护互联网搜索引擎
  • 政府网站建设长沙站长工具seo综合查询columbu cat
  • wordpress 栏目显示不出来优化网站软文
  • 一级a做爰片免费网站 新闻想要网站导航正式推广
  • 内蒙古微网站建设徐州网页关键词优化
  • 个人业务网站源码哪里有免费的网站推广服务
  • 做网站推广的需要了解哪些知识推广文章的推广渠道
  • 响应式网站无法做百度联盟seo入门教程
  • 阿里云建立网站备案天津建站网
  • 怎样做写真网站深圳网络推广方法
  • 嘉兴网站建设方案托管三个关键词介绍自己
  • 济邦建设有限公司官方网站营销方式有哪些
  • 仿素材网站源码seo技术团队
  • 1个空间做两个网站长沙网站搭建关键词排名
  • 公司名字变了网站备案销售怎么做
  • 课题组网站怎么做郑州网站seo
  • 班级网站建设图片搜狗站长平台
  • 锦江建设和交通局网站网站平台都有哪些
  • 做性视频网站有哪些内容windows永久禁止更新
  • 为什么企业网站不是开源系统湖南长沙疫情最新情况