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

泗县住房和城乡建设局网站泉州网站建设方案服务

泗县住房和城乡建设局网站,泉州网站建设方案服务,免费开个人网店,哪个网站可以做兼职整理一下之前Spring的学习笔记#xff0c;大致有一下几种Spring注入到容器中的方法: 1#xff09;、配置在xml的方式。 2#xff09;、开启包扫描ComponentScan使用Component#xff0c;Service#xff0c;Controller#xff0c;Repository#xff08;其实后三个都继承…整理一下之前Spring的学习笔记大致有一下几种Spring注入到容器中的方法: 1、配置在xml的方式。 2、开启包扫描ComponentScan使用ComponentServiceControllerRepository其实后三个都继承Component注册组件到spring容器里面 3、使用Bean注入 4、使用Import快速导入组件 Configuration ​ 声明为配置类与bean.xml一致 XML方式注入 Sping最开始的用法先定义好xml文件使用ClassPathXmlApplicationContext加载指定xml文件就创建好容器了当Bean过多的时候使用xml配置就显得比较繁琐所以在现在的大环境下这种注入方法已经过时了就简单的提一下 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbean iduser classcom.test.SpringCoreTest.test00.bean.Userproperty namename valueTom/propertyproperty nameage value12/property/bean/beans ComponentScan 需和Configuration注解一起使用与xml当中的context:component-scan base-package /一致表示扫描指定包下的类将带有Component注解的类全部扫描到容器当中 有几个常用的参数需了解一下 basePackages 扫描指定包下的类并且注入到spring容器里面 useDefaultFilters是否使用默认过滤器和excludeFilters、includeFilters配置一起使用 includeFilters包含过滤器为过滤的内容当useDefaultFilters为false的时候才生效 excludeFilters去除指定过滤器过滤的内容当useDefaultFilters为true的时候才能生效 过滤器为ComponentScan的内部注解类Filter classes指定类与type搭配使用 ​       type过滤器的类型org.springframework.context.annotation.FilterType.class枚举类中(共有五种仅记录三种经常使用的类型) ​ ANNOTATION指定过滤哪些注解例如Controller ​ ASSIGNABLE_TYPE指定过滤哪些类 ​ CUSTOM自定义过滤器可继承TypeFilter接口实现match方法 示例 public class SpringTest01Filter implements TypeFilter {/*** param metadataReader 读取当前扫描类的信息* param metadataReaderFactory 可以获取其他任何类的信息*/public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory)throws IOException {//获取当前注解信息ClassMetadata classMetadata metadataReader.getClassMetadata();//获取当前扫描类的信息String className classMetadata.getClassName();System.out.println(className);if(className.contains(er))//如果当前扫描类信息包含er的时候注入到Spring容器return true;elsereturn false;}}//配置类 ComponentScan(basePackagescom.test.SpringCoreTest.test01.config,includeFilters {Filter(type FilterType.CUSTOM,classes {SpringTest01Filter.class}) },useDefaultFilterstrue) Configuration 这里会有个问题为什么在使用过滤器的时候对useDefaultFilters有要求源码中解析 ClassPathBeanDefinitionScanner scanner new ClassPathBeanDefinitionScanner(this.registry,componentScan.getBoolean(useDefaultFilters), this.environment, this.resourceLoader); //该段代码中获取了useDefaultFilters的值 //进入该类中 public ClassPathBeanDefinitionScanner(BeanDefinitionRegistry registry, boolean useDefaultFilters,Environment environment, Nullable ResourceLoader resourceLoader) {Assert.notNull(registry, BeanDefinitionRegistry must not be null);this.registry registry;if (useDefaultFilters) {registerDefaultFilters();//useDefaultFilters为true时该方法开启了注册默认过滤器的方法}setEnvironment(environment);setResourceLoader(resourceLoader);}//进入到registerDefaultFilters方法里面 protected void registerDefaultFilters() {//执行了当前方法重置了includeFilters包含的过滤器导致带有Component注解的类都会加载到容器里面所以在useDefaultFilters为true的情况下includeFilters失效的原因在此this.includeFilters.add(new AnnotationTypeFilter(Component.class));ClassLoader cl ClassPathScanningCandidateComponentProvider.class.getClassLoader();try {this.includeFilters.add(new AnnotationTypeFilter(((Class? extends Annotation) ClassUtils.forName(javax.annotation.ManagedBean, cl)), false));logger.trace(JSR-250 javax.annotation.ManagedBean found and supported for component scanning);}catch (ClassNotFoundException ex) {// JSR-250 1.1 API (as included in Java EE 6) not available - simply skip.}try {this.includeFilters.add(new AnnotationTypeFilter(((Class? extends Annotation) ClassUtils.forName(javax.inject.Named, cl)), false));logger.trace(JSR-330 javax.inject.Named annotation found and supported for component scanning);}catch (ClassNotFoundException ex) {// JSR-330 API not available - simply skip.}} Bean 需和Configuration一起使用容器中的key为方法名bean为返回的对象默认为单例。示例 Configuration public class SpringConfig01 {Beanpublic User user() {return new User();}//.... } 以下三个注解可以和Bean一起使用 Scope ​ 指定容器组件类型 ​ prototype多例模式当容器创建时并不会创建对象而是在调用时创建一个新的对象 ​ singleton单例模式容器创建时对象也会创建 ​ request主要是针对web应用每提交一次请求都回去创建一个对象 ​ session针对web应用创建一个session创建一个对象 Lazy ​ 懒加载只有当前组件第一次被调用的时候才会去创建对象针对单例模式 Conditional ​ 可指定在某些条件下才能将当前组件注入到容器 ​ 参数为继承org.springframework.context.annotation.Condition.class的实现类 /*** param context 可以使用ApplicationContext(上下文)* param metadata 可以获取到注解信息*/public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {//获取到BeanFactoryConfigurableListableBeanFactory beanFactory context.getBeanFactory();//可获取环境参数如jvm环境spring环境等等Environment environment context.getEnvironment();String osName environment.getProperty(os.name);if(osName.contains(Windows))//如果当前环境为window则创建当前组件并加载到容器中return true;return false;} Import ​ 快速导入组件,共三种形式这个算是一个比较主要的注入方式吧在Spring中需要做一些扩展的时候都会需要用到这个比如mybatis-spring融合开启AOP功能等使用的就是这里的第三种方式 1、Import(value { Dog.class,Cat.class })//快速导入到容器中以类的全路径作为bean的ID 2、Import(value { SpringTest03ImportSelector.class })//实现ImportSelector接口 public class SpringTest03ImportSelector implements ImportSelector {public String[] selectImports(AnnotationMetadata importingClassMetadata) {//返回为类的全类名return new String [] {};//注意一下这边必须返回一个空的数组不然启动报错空指针异常}}//在源码org.springframework.context.annotation.ConfigurationClassParser.class类中 private CollectionSourceClass asSourceClasses(String... classNames) throws IOException {ListSourceClass annotatedClasses new ArrayList(classNames.length);//这里的classNames为之前ImportSelector返回的数组为null的话即报错for (String className : classNames) {annotatedClasses.add(asSourceClass(className));}return annotatedClasses;} 3、Import(value { SpringTest03ImportBeanDefinitionRegistrar.class })//实现ImportBeanDefinitionRegistrar接口所有的bean注册都会使用到该接口进行注册 /*** param importingClassMetadata 当前类的注解信息 * param registry BeanDefinition的注册类* 可做条件修改*/ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {boolean b1 registry.containsBeanDefinition(user);if(b1) {registry.registerBeanDefinition(pig, new RootBeanDefinition(Pig.class));}
http://www.pierceye.com/news/227589/

相关文章:

  • 自助服务器网站建设修改wordpress的库名
  • 惠州做网站乐云seo网站建设如何插音乐
  • 自媒体图片素材网站东莞网站建设推广技巧
  • 新浪网站是什么程序做的六安网站关键词排名优化地址
  • 手机网站大全123456镇江手机网站建设
  • 企业网站模板下载哪家公司强服装设计就业前景如何
  • 婚纱网站源代码网站制作专业的公司
  • 公司经营范围 网站开发网络工程好就业吗
  • 企业网站建设与管理试题wordpress设置页面访问权限
  • 中国顺德手机网站设计安居客做网站
  • 网站运营的含义百度地图轨迹导航
  • 网站开发时创业中文网站模板
  • 男人最爱的做网站网站建设合作合同范文
  • 我和你99谁做的网站做润滑油网站图片
  • 基于wordpress门户网站wordpress可以自己写代码吗
  • 自己做发卡网站wordpress搬家出问题
  • 网站建设数据库搭建秦皇岛市属于哪个省
  • 网站建设怎样找客户辽宁网站定制企业
  • 建设工程项目管理网站上海it公司
  • 网站运营需要 做哪些工作做网站需要了解的知识
  • 旅游去过的地方可做标识网站百度一下网页入口
  • 做ps找图的网站有哪些法与家国建设征文网站
  • 途途外贸企业网站管理系统aspnet网站模板
  • 网站建设企业网站常用参数
  • 深圳市建设工程质量检测网站网站建设公司 待遇
  • 站长工具大全php做在线直播网站
  • 品牌建设网站公司排名3d模型代做网站
  • 保定网站建设模板联系方式网站设计时图片怎么做
  • 网站策划书内容鄂尔多斯网站制作 建设
  • 广州展厅设计公司排名seo快速排名首页