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

更改各网站企业信息怎么做广州网站建设新锐

更改各网站企业信息怎么做,广州网站建设新锐,小程序开发专业定制,搜索引擎推广价格BeanDefinition BeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。比如: class,表示Bean类型scope,表示Bean作用域,单例或原型等lazyInit:表示Bean是否是懒加载initMeth…

BeanDefinition

BeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。比如:

  • class,表示Bean类型
  • scope,表示Bean作用域,单例或原型等
  • lazyInit:表示Bean是否是懒加载
  • initMethodName:表示Bean初始化时要执行的方法
  • destroyMethodName:表示Bean销毁时要执行的方法
  • 还有很多…

BeanDefinitionReader

接下来,我们来介绍几种在Spring源码中所提供的BeanDefinition读取器(BeanDefinitionReader),这些BeanDefinitionReader在我们使用Spring时用得少,但在Spring源码中用得多,相当于Spring源码的基础设施。

AnnotatedBeanDefinitionReader

可以直接把某个类转换为BeanDefinition,并且会解析该类上的注解,比如

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);AnnotatedBeanDefinitionReader annotatedBeanDefinitionReader = new AnnotatedBeanDefinitionReader(context);// 将User.class解析为BeanDefinition
annotatedBeanDefinitionReader.register(User.class);System.out.println(context.getBean("user"));

注意:它能解析的注解是:@Conditional,@Scope、@Lazy、@Primary、@DependsOn、@Role、@Description

XmlBeanDefinitionReader

可以解析标签

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);XmlBeanDefinitionReader xmlBeanDefinitionReader = new XmlBeanDefinitionReader(context);
int i = xmlBeanDefinitionReader.loadBeanDefinitions("spring.xml");System.out.println(context.getBean("user"));

ClassPathBeanDefinitionScanner

ClassPathBeanDefinitionScanner是扫描器,但是它的作用和BeanDefinitionReader类似,它可以进行扫描,扫描某个包路径,对扫描到的类进行解析,比如,扫描到的类上如果存在@Component注解,那么就会把这个类解析为一个BeanDefinition,比如:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.refresh();ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(context);
scanner.scan("com.zhouyu");System.out.println(context.getBean("userService"));

BeanFactory

BeanFactory表示**Bean工厂**,所以很明显,BeanFactory会负责创建Bean,并且提供获取Bean的API。

而ApplicationContext是BeanFactory的一种,在Spring源码中,是这么定义的:

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
}

ApplicationContext

上面有分析到,ApplicationContext是个接口,实际上也是一个BeanFactory,不过比BeanFactory更加强大,比如:

  1. HierarchicalBeanFactory:拥有获取父BeanFactory的功能
  2. ListableBeanFactory:拥有获取beanNames的功能
  3. ResourcePatternResolver:资源加载器,可以一次性获取多个资源(文件资源等等)
  4. EnvironmentCapable:可以获取运行时环境(没有设置运行时环境功能)
  5. ApplicationEventPublisher:拥有广播事件的功能(没有添加事件监听器的功能)
  6. MessageSource:拥有国际化功能

AnnotationConfigApplicationContext

  1. ConfigurableApplicationContext:继承了ApplicationContext接口,添加事件监听器、添加BeanFactoryPostProcessor、设置Environment,获取ConfigurableListableBeanFactory等功能
  2. AbstractApplicationContext:实现了ConfigurableApplicationContext接口
  3. GenericApplicationContext:继承了AbstractApplicationContext,实现了BeanDefinitionRegistry接口,拥有了所有ApplicationContext的功能,并且可以注册BeanDefinition,注意这个类中有一个属性(DefaultListableBeanFactory beanFactory)
  4. AnnotationConfigRegistry:可以单独注册某个类为BeanDefinition(可以处理该类上的@Configuration注解,已经可以处理@Bean注解),同时可以扫描。
  5. AnnotationConfigApplicationContext:继承了GenericApplicationContext,实现了AnnotationConfigRegistry接口,拥有了以上所有的功能

ClassPathXmlApplicationContext

它也是继承了AbstractApplicationContext,但是相对于AnnotationConfigApplicationContext而言,功能没有AnnotationConfigApplicationContext强大,比如不能注册BeanDefinition。

OrderComparator

OrderComparator是Spring所提供的一种比较器,可以用来根据@Order注解或实现Ordered接口来执行值进行笔记,从而可以进行排序。

BeanPostProcessor

BeanPostProcess表示Bena的后置处理器,我们可以定义一个或多个BeanPostProcessor,比如通过一下代码定义一个BeanPostProcessor:

@Component
public class ZhouyuBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {if ("userService".equals(beanName)) {System.out.println("初始化前");}return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if ("userService".equals(beanName)) {System.out.println("初始化后");}return bean;}
}

**一个BeanPostProcessor可以在任意一个Bean的初始化之前以及初始化之后去额外的做一些用户自定义的逻辑,当然,我们可以通过判断beanName来进行针对性处理(针对某个Bean,或某部分Bean)。**可以通过定义BeanPostProcessor来干涉Spring创建Bean的过程。

BeanFactoryPostProcessor

BeanFactoryPostProcessor表示Bean工厂的后置处理器,其实和BeanPostProcessor类似,BeanPostProcessor是干涉Bean的创建过程,BeanFactoryPostProcessor是干涉BeanFactory的创建过程。比如,我们可以这样定义一个BeanFactoryPostProcessor:

@Component
public class ZhouyuBeanFactoryPostProcessor implements BeanFactoryPostProcessor {@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {System.out.println("加工beanFactory");}
}

我们可以在postProcessBeanFactory()方法中对BeanFactory进行加工。

FactoryBean

上面提到,我们可以通过BeanPostPorcessor来干涉Spring创建Bean的过程,但是如果我们想一个Bean完完全全由我们来创造,也是可以的,比如通过FactoryBean:

@Component
public class ZhouyuFactoryBean implements FactoryBean {@Overridepublic Object getObject() throws Exception {UserService userService = new UserService();return userService;}@Overridepublic Class<?> getObjectType() {return UserService.class;}
}

通过上面这段代码,我们自己创造了一个UserService对象,并且它将成为Bean。但是通过这种方式创造出来的UserService的Bean,只会经过**初始化后**,其他Spring的生命周期步骤是不会经过的,比如依赖注入。

有同学可能会想到,通过@Bean也可以自己生成一个对象作为Bean,那么和FactoryBean的区别是什么呢?其实在很多场景下他俩是可以替换的,但是站在原理层面来说的,区别很明显,@Bean定义的Bean是会经过完整的Bean生命周期的。

ExcludeFilter和IncludeFilter

这两个Filter是Spring扫描过程中用来过滤的。ExcludeFilter表示排除过滤器,IncludeFilter表示包含过滤器。

比如以下配置,表示扫描com.zhouyu这个包下面的所有类,但是排除UserService类,也就是就算它上面有@Component注解也不会成为Bean。

@ComponentScan(value = "com.zhouyu",excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = UserService.class)})
public class AppConfig {
}

再比如以下配置,就算UserService类上没有@Component注解,它也会被扫描成为一个Bean。

@ComponentScan(value = "com.zhouyu",includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = UserService.class)})
public class AppConfig {
}

FilterType分为:

  1. ANNOTATION:表示是否包含某个注解
  2. ASSIGNABLE_TYPE:表示是否是某个类
  3. ASPECTJ:表示否是符合某个Aspectj表达式
  4. REGEX:表示是否符合某个正则表达式
  5. CUSTOM:自定义

在Spring的扫描逻辑中,默认会添加一个AnnotationTypeFilter给includeFilters,表示默认情况下Spring扫描过程中会认为类上有@Component注解的就是Bean

EnvironmentAware

凡注册到Spring容器内的bean,实现了EnvironmentAware接口重写setEnvironment方法后,在工程启动时可以获得application.properties的配置文件配置的属性值。

public class DataSourceAutoConfig implements EnvironmentAware {@Overridepublic void setEnvironment(Environment environment) {String prefix = "router.jdbc.datasource.";dbCount = Integer.valueOf(environment.getProperty(prefix + "dbCount"));tbCount = Integer.valueOf(environment.getProperty(prefix + "tbCount"));String dataSources = environment.getProperty(prefix + "list");for (String dbInfo : dataSources.split(",")) {Map<String, Object> dataSourceProps = PropertyUtil.handle(environment, prefix + dbInfo, Map.class);dataSourceMap.put(dbInfo, dataSourceProps);}}

AbstractRoutingDataSource

动态数据源配置需要继承 AbstractRoutingDataSource 实现 determineCurrentLookupKey 方法。

public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return "db" + DBContextHolder.getDBKey();}
}

ApplicationContext

ApplicationContext,继承于 ListableBeanFactory,也就继承了关于 BeanFactory 方法,比如一些 getBean 的方法。另外 ApplicationContext 本身是 Central 接口,但目前还不需要添加一些获取 ID 和父类上下文,所以暂时没有接口方法的定义。

public interface ApplicationContext extends ListableBeanFactory {
}

ConfigurableApplicationContext

ApplicationListener

ApplicationContextAware

public class SpringContextUtils implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext)throws BeansException {SpringContextUtils.applicationContext = applicationContext;}public static Object getBean(String name) {return applicationContext.getBean(name);}public static <T> T getBean(Class<T> requiredType) {return applicationContext.getBean(requiredType);}public static <T> T getBean(String name, Class<T> requiredType) {return applicationContext.getBean(name, requiredType);}public static boolean containsBean(String name) {return applicationContext.containsBean(name);}public static boolean isSingleton(String name) {return applicationContext.isSingleton(name);}public static Class<? extends Object> getType(String name) {return applicationContext.getType(name);}
}

InitializingBean

InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。

public static class MapperScannerRegistrarNotFoundConfiguration implements InitializingBean {@Overridepublic void afterPropertiesSet() {}
}

BeanFactoryAware

beanFactory让你可以不依赖注入方式,随意的读取IOC容器里面的对象,不过beanFactory本身还是要注入的。

public class BeanFactorys implements BeanFactoryAware {private BeanFactory beanFactory;@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {this.beanFactory = beanFactory;}public void init() {Object service = this.beanFactory.getBean("service");}
}

ImportBeanDefinitionRegistrar

作用:目的是实现bean的动态注入。

实现这个接口的类可以在使用@Configuration的地方引入,然后实现动态的bean注入到spring容器,这个是在@Bean注解定义bean 后动态的注入bean

AutoConfigurationPackages

作用是将添加该注解的类所在的package 作为自动配置package进行管理。

可以通过AutoConfigurationPackages工具类获取自动配置package列表。

FactoryBean

MetadataReader

https://blog.csdn.net/f641385712/article/details/88765470

BeanPostProcessor

**用于修改新实例化 Bean 对象的扩展点,**BeanPostProcessor 是在 Bean 对象实例化之后修改 Bean 对象,也可以替换 Bean 对象。

BeanFactoryPostProcess

允许自定义修改 BeanDefinition 属性信息

public interface BeanFactoryPostProcessor {/*** 在所有的 BeanDefinition 加载完成后,实例化 Bean 对象之前,提供修改 BeanDefinition 属性的机制** @param beanFactory* @throws BeansException*/void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}

文章转载自:

http://um6vXuG7.qfdyt.cn
http://Yrlh9pwG.qfdyt.cn
http://S2nVB04u.qfdyt.cn
http://SUeMg0oE.qfdyt.cn
http://jBfoT3ki.qfdyt.cn
http://ajHs1Ssb.qfdyt.cn
http://Eh6uLYOZ.qfdyt.cn
http://h8dDiLyR.qfdyt.cn
http://sw55UiWB.qfdyt.cn
http://67nVgEe3.qfdyt.cn
http://rm6OsrO9.qfdyt.cn
http://nzxaw2Rn.qfdyt.cn
http://poNQGL1P.qfdyt.cn
http://QKeIpmiz.qfdyt.cn
http://Z1KioHKb.qfdyt.cn
http://VWY6t3LD.qfdyt.cn
http://wUnfdHKJ.qfdyt.cn
http://BSUIJ5of.qfdyt.cn
http://ygVyjvKN.qfdyt.cn
http://twv60lB0.qfdyt.cn
http://zYSXF1iQ.qfdyt.cn
http://7xgalQ5N.qfdyt.cn
http://UT1Uvvj2.qfdyt.cn
http://VNa1YfBj.qfdyt.cn
http://jqjqGc0M.qfdyt.cn
http://nZGsWq2z.qfdyt.cn
http://LcK8iKl2.qfdyt.cn
http://ge7SAl92.qfdyt.cn
http://eF39Bkyc.qfdyt.cn
http://KjIXB0Fk.qfdyt.cn
http://www.dtcms.com/wzjs/752833.html

相关文章:

  • 玉溪市城乡建设局网站灌云网站制作
  • dedecms做资源下载网站手游做网站推广应该怎么做
  • 网站图片优化工具江西省城住房和城乡建设厅网站
  • 哪个公司做网站网站广告牌制作教程
  • 平台建网站山西教育学会网站建设
  • .net网站开发文档网站建设代理都有哪些
  • 做彩票网站需要什么技术百度怎么网站排名
  • 固安建设行政主管部门官方网站厦门网站建设哪里好
  • 建设商城网站公司 百度百科谷歌amp wordpress
  • 企业品牌网站建设定制开发南充网络推广
  • 有优惠券网站 怎么做代理自动发货网站建设
  • 南京网站建设外贸云南建设网站澜沧项目
  • 网站的购物车怎么做数商云怎么样
  • 静态网站建设报告网站主机托管
  • 网站开发难点分析手机官网制作
  • 网站开发认证考试在线阅读小说网站怎么建设
  • 北京南站在几环网站开发培训流程
  • 爱站工具包手机版用ae做模板下载网站
  • wordpress获取标签页优化平台建设公司
  • 如何开发移动网站免费软件app推荐
  • 中国空间站设计在轨飞行多少年318全讯申请网址
  • 深圳外贸网站建设制作方法wordpress redis插件
  • 网站架构有哪些重庆互联网公司排行榜
  • 广告网站建设原创网站首页设计排版要点
  • 做网站接广告赚钱吗做h5的软件
  • 沙井营销型网站建设短视频拍摄剪辑培训班
  • wordpress修改站点logo大小一起合伙做项目的网站
  • 苏州网站开发公司兴田德润放心东莞微网站建设报价
  • 餐饮设计网站深圳市室内设计公司排名
  • 可信网站认证 代理商网络空间安全专业大学排名