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

烟台当地网站有限公司简介

烟台当地网站,有限公司简介,wordpress文章标题字体,wordpress文章行距很大核心接口#xff1a; 组件扫描器#xff1a; 开发过程中#xff0c;需要根据需求加载必要的bean#xff0c;排除指定bean 设定组件扫描加载过滤器#xff1a; 名称#xff1a;ComponentScan 类型#xff1a;类注解 位置#xff1a;类定义上方 作用#xff1a;设置…核心接口 组件扫描器 开发过程中需要根据需求加载必要的bean排除指定bean 设定组件扫描加载过滤器 名称ComponentScan 类型类注解 位置类定义上方 作用设置spring配置加载类扫描规则 范例 ComponentScan(valuecom.itzhuzhu, //设置基础扫描路径excludeFilters //设置过滤规则当前为排除过滤ComponentScan.Filter( //设置过滤器type FilterType.ANNOTATION, //设置过滤方式为按照注解进行过滤classesRepository.class) //设置具体的过滤项过滤所有Repository修饰的bean) public class SpringConfig(){}includeFilters设置包含性过滤器 excludeFilters设置排除性过滤器 type设置过滤器类型 自定义组件过滤器 名称TypeFilter 类型接口 作用自定义类型过滤器 范例 ComponentScan(valuecom.itzhuzhu,excludeFilters ComponentScan.Filter(type FilterType.CUSTOMclassesMyTypeFilter.class) ) public class SpringConfig{}public class MyTypeFilter implements TypeFilter {Override//加载的类满足要求匹配成功public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {//通过参数获取加载的类的元数据ClassMetadata classMetadata metadataReader.getClassMetadata();//通过类的元数据获取类的名称String className classMetadata.getClassName();//如果加载的类名满足过滤器要求返回匹配成功if(className.equals(com.itheima.service.impl.UserServiceImpl)){//返回true表示匹配成功返回false表示匹配失败。此处仅确认匹配结果不会确认是排除还是加入排除/加入由配置项决定与此处无关return true;}return false;} }自定义导入器 bean只有通过配置才可以进入spring容器被spring加载并控制导入器可以不通过bean的方式加载 配置bean的方式如下 XML文件中使用标签配置使用Component及衍生注解配置企业开发过程中通常需要配置大量的bean需要一种快速高效配置大量bean的方式 ImportSelector 名称 ImportSelector 类型接口 作用自定义bean导入器 范例 配置文件 ClassNamecom.itzhuzhu.dao.impl.AccountDaoImp,com.itzhuzhu.dao.impl.BookDaoImpl pathcom.itzhuzhu.dao.impl.*public class CustomerImportSelector implements ImportSelector {private String expression;public CustomerImportSelector(){try {//初始化时指定加载的properties文件名Properties loadAllProperties PropertiesLoaderUtils.loadAllProperties(import.properties);//设定加载的属性名expression loadAllProperties.getProperty(path);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {//1.定义扫描包的名称String[] basePackages null;//2.判断有Import注解的类上是否有ComponentScan注解if (importingClassMetadata.hasAnnotation(ComponentScan.class.getName())) {//3.取出ComponentScan注解的属性MapString, Object annotationAttributes importingClassMetadata.getAnnotationAttributes(ComponentScan.class.getName());//4.取出属性名称为basePackages属性的值basePackages (String[]) annotationAttributes.get(basePackages);}//5.判断是否有此属性如果没有ComponentScan注解则属性值为null如果有ComponentScan注解则basePackages默认为空数组if (basePackages null || basePackages.length 0) {String basePackage null;try {//6.取出包含Import注解类的包名basePackage Class.forName(importingClassMetadata.getClassName()).getPackage().getName();} catch (ClassNotFoundException e) {e.printStackTrace();}//7.存入数组中basePackages new String[] {basePackage};}//8.创建类路径扫描器ClassPathScanningCandidateComponentProvider scanner new ClassPathScanningCandidateComponentProvider(false);//9.创建类型过滤器(此处使用切入点表达式类型过滤器)TypeFilter typeFilter new AspectJTypeFilter(expression,this.getClass().getClassLoader());//10.给扫描器加入类型过滤器scanner.addIncludeFilter(typeFilter);//11.创建存放全限定类名的集合SetString classes new HashSet();//12.填充集合数据for (String basePackage : basePackages) {scanner.findCandidateComponents(basePackage).forEach(beanDefinition - classes.add(beanDefinition.getBeanClassName()));}//13.按照规则返回return classes.toArray(new String[classes.size()]);} }Configuration ComponentScan(com.itzhuzhu) Import(CustomeImportBeanDefinitionRegistrar.class) // 加载导入器 public class SpringConfig {}自定义注册器 名称ImportBeanDefinitionRegistrar 类型接口 作用自定义bean定义注册器 范例 public class CustomeImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {private String expression;public CustomeImportBeanDefinitionRegistrar(){try {//初始化时指定加载的properties文件名Properties loadAllProperties PropertiesLoaderUtils.loadAllProperties(import.properties);//设定加载的属性名expression loadAllProperties.getProperty(path);} catch (IOException e) {e.printStackTrace();}}Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {//1.定义扫描包的名称String[] basePackages null;//2.判断有Import注解的类上是否有ComponentScan注解if (importingClassMetadata.hasAnnotation(ComponentScan.class.getName())) {//3.取出ComponentScan注解的属性MapString, Object annotationAttributes importingClassMetadata.getAnnotationAttributes(ComponentScan.class.getName());//4.取出属性名称为basePackages属性的值basePackages (String[]) annotationAttributes.get(basePackages);}//5.判断是否有此属性如果没有ComponentScan注解则属性值为null如果有ComponentScan注解则basePackages默认为空数组if (basePackages null || basePackages.length 0) {String basePackage null;try {//6.取出包含Import注解类的包名basePackage Class.forName(importingClassMetadata.getClassName()).getPackage().getName();} catch (ClassNotFoundException e) {e.printStackTrace();}//7.存入数组中basePackages new String[] {basePackage};}//8.创建类路径扫描器ClassPathBeanDefinitionScanner scanner new ClassPathBeanDefinitionScanner(registry, false);//9.创建类型过滤器(此处使用切入点表达式类型过滤器)TypeFilter typeFilter new AspectJTypeFilter(expression,this.getClass().getClassLoader());//10.给扫描器加入类型过滤器scanner.addIncludeFilter(typeFilter);//11.扫描指定包scanner.scan(basePackages);} }bean初始化过程解析 bean初始化过程解析 BeanFactoryPostProcessor 作用定义了在bean工厂对象创建后bean对象创建前执行的动作用于对工厂进行创建后业务处理 运行时机当前操作用于对工厂进行处理仅运行一次 BeanPostProcessor 作用定义了所有bean初始化前后进行的统一动作用于对bean进行创建前业务处理与创建后业务处理 运行时机当前操作伴随着每个bean的创建过程每次创建bean均运行该操作 InitializingBean 作用定义了每个bean的初始化前进行的动作属于非统一性动作用于对bean进行创建前业务处理 运行时机当前操作伴随着任意一个bean的创建过程保障其个性化业务处理 注意上述操作均需要被spring容器加载才可以运行 bean初始化过程解析 package config.postprocessor;import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;public class MyBeanFactory implements BeanFactoryPostProcessor {Override//工厂后处理bean接口核心操作public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {System.out.println(bean工厂制作好了还有什么事情需要处理);} } package config.postprocessor;import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;public class MyBean implements BeanPostProcessor {Override//所有bean初始化前置操作public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println(bean之前巴拉巴拉);System.out.println(beanName);return bean;}Override//所有bean初始化后置操作public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println(bean之后巴拉巴拉);return bean;} }import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.beans.factory.InitializingBean;public class EquipmentDaoImpl implements EquipmentDao,InitializingBean {public void save() {System.out.println(equipment dao running...);}Override//定义当前bean初始化操作功效等同于init-method属性配置public void afterPropertiesSet() throws Exception {SqlSessionFactoryBean fb;System.out.println(EquipmentDaoImpl......bean ...init......);} }繁琐的bean初始化过程处理 FactoryBean 对单一的bean的初始化过程进行封装达到简化配置的目的 FactoryBean与BeanFactory区别 FactoryBean封装单个bean的创建过程 BeanFactorySpring容器顶层接口定义了bean相关的获取操作
http://www.pierceye.com/news/872602/

相关文章:

  • 在线做logo的网站泉州做网站哪家好
  • 知名企业网站人才招聘情况如何网络系统集成
  • 做灯带的网站重庆有哪些好玩的地方
  • 小孩子做手工做游戏的网站百度账号设置
  • 大庆做网站公司巩义网站建设方案报价
  • 该网站受海外服务器保护品牌营销型网站建设公司
  • 免费做一建或二建题目的网站郑州企业建站系统模板
  • 想自己建个网站徐州做网站软件
  • 蓝色系网站设计企业应对承包商的施工方案尤其是
  • 旅游网站 源码 织梦导购网站开发
  • 头像制作网站开源低代码平台
  • 网站到期域名怎么解决办法自己动手建立网站3
  • 比较有名的网站建设平台吉林建设网站
  • 网站服务器解决方案wamp安装wordpress
  • 义乌制作网站赣州网站建设公司
  • 东莞网站平台后缀建设淘宝客网站
  • 深圳龙华新区住房和建设局网站示范校建设专题网站
  • 成都制作网站的公司简介wordpress录入表单写数据库
  • 中山网站设计收费标准互联网保险发展现状和趋势
  • 公司网站发布流程简述企业网络建设的步骤
  • 哪些网站可以做问卷第1063章 自己做视频网站
  • 电子商务网站 费用做p2p网站
  • 网站建设 猴王网络厦门app开发网站开发公司电话
  • 做3d图的网站有哪些比wordpress更好的网站程序
  • 仿做网站可以整站下载器吧网络网站建设公司
  • 网站流量用完wordpress page 父页面
  • 旅游地网站制作有没有做网站的高手
  • 有什么网站可以做一起作业什么网站可以兼职做效果图
  • 工程中标查询网站长沙网站制作作
  • 免费网站下载直播软件企业品牌网站建设类型