bean

BeanUtils.copyProperties复制失败探究

我只是一个虾纸丫 提交于 2020-03-26 16:54:43
一 BeanUtils.copyProperties是什么 BeanUtils类全路径为org.springframework.beans.BeanUtils是spring-beans包下的一个用于bean相关工具类。 BeanUtils.copyProperties(Object source, Object target)这个方法的作用是 把source这个bean的全部属性值 复制到 target这个bean对象 二 遇到问题BeanUtils.copyProperties(Object source, Object target)写入失败 source和 target 是两个不同类的对象,属性名称全都一样,发现其它字段都拷贝成功,但是有一个字段没有拷贝复制过来 仔细检查发现:该拷贝失败字段的类型不一样,一个是int类型 一个是String类型, 怀疑:source对象和target对象相应属性的名称和类型必须都一样才可以成功拷贝属性值, 经过修改测试发现,亲测有效, 下面阅读源代码进行确认原因。 三 阅读源码 private static void copyProperties(Object source, Object target, Class<?> editable, String... ignoreProperties) throws BeansException

@propertySource @ImportResource @Bean

给你一囗甜甜゛ 提交于 2020-03-26 09:03:19
@propertySource (value ={"classpath:......"} 导入指定的配置的文件 ,让配置文件的内容生效。SpringBoot里面没有配置文件, 我们自己编写的配置文件也不能自动识别,想让配置文件生效,加载进来@ImportResource标注在一个配置类上。 @ImportResource(location={"classpath:xx.xml"})//导入配置文件 @Configuration:指明当前配置类是一个配置类,就是用来替代之前的Spring配置文件的 @Bean 将方法的返回值添加到容器中,容器中这个组件默认的ID就是方法名 @Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名 SpringBoot 推荐给容器中添加组件的方式 1.配置类========Spring配置文件//配置类在类的上面写上@Configuration 2 使用@Bean给容器中添加组件 来源: https://www.cnblogs.com/shitulaoma/p/12464967.html

Spring基于xml的环境搭建

风流意气都作罢 提交于 2020-03-25 22:41:50
创建pom.xlm文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.itheima</groupId> <artifactId>day01_eesy_03spring</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> </dependencies> <

Spring IOC 启动过程?

只愿长相守 提交于 2020-03-25 21:01:50
这是一道经典的Spring回答的深入程度可以看出面试者对Spring框架的理解。 https://www.jianshu.com/p/8c24e0c804cc 首先看图理解过程 Spring的模型是一切皆Bean,从上图可以看出,分为以下几步: 第一步读取bean配置信息 第二步根据bean注册表实例化Bean 第三步将Bean实例放到容器中 第四步使用Bean 然后看一下Spring类的继承图 然后结合代码看过程 上面的回答是个简单版本,不够详细,大部分面试官是不满意的,下面结合代码。 我们学习并练习Spring框架时,一般开始都是这样一句代码: 意思是加载xml文件创建一个ApplicationContext 的Spring 容器。 那么就从new ClassPathXmlApplicationContext这个构造方法开始看吧。进入源码: 其实可以看到他是来到这里了: 上面这个构造方法呢,其实就是new ClassPathXmlApplicationContext("classpath:application.xml") 真正开始的地方。开始之前大家先看看上面第二、第三张图“ApplicationContext 的继承图”和“BeanFactory的继承图”,ClassPathXmlApplicationContext 经过好几次继承才到 ApplicationContext

spring给容器中注入组件的几种方式

不问归期 提交于 2020-03-25 13:29:21
目录 环境搭建 <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.5.RELEASE</version> </dependency> spring给容器中注入组件 br/>1.包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)适用于把自己写的类加入组件(默认ID类名首字母小写) 此种方式比较简单就不贴代码了 2.@Bean[导入的第三方包里面的组件] (注意一定要在这个配置类上加上@Configuration) // @Scope指定作用域 // prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。 // 每次获取的时候才会调用方法创建对象; // singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。 // 以后每次获取就是直接从容器(map.get())中拿, // request:同一次请求创建一个实例 // session

SpringMVC参数绑定(四)

泄露秘密 提交于 2020-03-25 10:30:42
1.默认支持的参数类型 处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值。   HttpServletRequest     通过request对象获取请求信息   HttpServletResponse     通过response处理响应信息   HttpSession     通过session对象得到session中存放的对象 2.Model/ModelMap     (1) Model     除了ModelAndView以外,还可以使用Model来向页面传递数据,     Model是一个接口,在参数里直接声明model即可。     如果使用Model则可以不使用ModelAndView对象,Model对象可以向页面传递数据,View对象则可以使用String返回值替代。     不管是Model还是ModelAndView,其本质都是使用Request对象向jsp传递数据。   代码实现: /** * 根据id查询商品,使用Model * * @param request * @param model * @return */ @RequestMapping("/itemEdit") public String queryItemById(HttpServletRequest request, Model model) { //

spring源码解析之默认标签解析准备过程

◇◆丶佛笑我妖孽 提交于 2020-03-25 07:19:45
Spring 标签的解析包括 2 个部分,一部分是默认标签解析,另一部分是自定义标签的解析。而默认标签主要包含了如下四类: import 、 alias 、 bean 、 beans 。 标签的解析是在函数 parseBeanDefinitions 中进行的 protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) { //检查Namespace是否为默认命名空间 if (delegate.isDefaultNamespace(root)) { NodeList nl = root.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node node = nl.item(i); if (node instanceof Element) { Element ele = (Element) node; if (delegate.isDefaultNamespace(ele)) { parseDefaultElement(ele, delegate); } else { delegate.parseCustomElement(ele); } } } } else { delegate

spring源码学习之默认标签的解析(二)

别等时光非礼了梦想. 提交于 2020-03-25 07:19:25
  这个是接着上一篇来写,主要是这章内容比较多,还是分开来写吧! 一、AbstractBeanDefinition属性介绍 XML中的所有的属性都可以在GenericBeanDefinition中找到对应,GenericBeanDefinition只是子类实现,大部分通用的配置都在 其父类AbstractBeanDefinition中定义,来看一下AbstractBeanDefinition中有哪些属性定义,因为我看的是spring5.0版本,和作者的版本应该不一样,这里是少了两个属性的就是scope和singleton,我下面是spring5.0的源码: 1 /** 2 * bean的作用范围,对应bean的属性scope 3 */ 4 @Nullable 5 private String scope = SCOPE_DEFAULT; 6 7 /** 8 * 是否是抽象,对应bean属性abstract 9 */ 10 private boolean abstractFlag = false; 11 12 /** 13 * 是否延迟加载,对应bean属性lazy-init 14 */ 15 private boolean lazyInit = false; 16 17 /** 18 * 自动注入模式,对应bean属性autowire 19 */ 20 private int

spring源码学习之默认标签的解析(一)

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-25 07:18:34
  继续spring源码的学习之路,现在越来越觉得这个真的很枯燥的,而且我觉得要是自己来看源码,真的看不下去,不是没有耐心,而是真的没有头绪,我觉得结合着书来看,还是很有必要的,最起码大致的流程是能够捋清楚的,继续,希望自己能够坚持到最后! 一、标签解析的总体的理解 spring标签包括默认标签和自定义标签两种,今天只是来探索默认标签的! org.springframework.beans.factory.xml包下的DefaultBeanDefinitionDocumentReader类中 1 private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) { 2 // 对import标签的处理 3 if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) { 4 importBeanDefinitionResource(ele); 5 } 6 // 对alias标签的处理 7 else if (delegate.nodeNameEquals(ele, ALIAS_ELEMENT)) { 8 processAliasRegistration(ele); 9 } 10 // 对bean标签的处理 11 else if (delegate

spring中的钩子方法和钩子接口

ⅰ亾dé卋堺 提交于 2020-03-24 19:50:59
3 月,跳不动了?>>> spring framework具有很高的扩展性,我们可以通过这些接口对spring做灵活的扩展。 1. Aware接口 Spring中提供了各种Aware接口,方便从上下文中获取当前的运行环境,比较常见的几个子接口有: ApplicationContextAware、BeanClassLoaderAware、BeanFactoryAware、BeanNameAware、EnvironmentAware、ImportAware、MessageSourceAware、ServletConfigAware、ServletContextAware等等。 例如:要想通过应用上下文获取bean对象,可以通过如下方式。 @Component public class ApplicationContextAssistor implements ApplicationContextAware { private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext =