bean

Springboot~多个数据源时自定义datasource的bean

▼魔方 西西 提交于 2020-03-19 19:14:50
当我们的项目里有多种数据源时,mysql,h2,mongodb,es等等,这时你需要为每种数据源添加自己的bean类,在bean里构建配置,而直接在yml里的配置往往会出现循环引用的问题。 org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'scopedTarget.dataSource': Requested bean is currently in creation: Is there an unresolvable circular reference? 有时,也会出现其它奇葩的问题,总之,当你的项目里数据源比较多时,通过配置文件+profile来管理它们更清晰,也不容易出错。 为h2添加配置bean /** * 多数据源时,H2的datasource声明 */ @Configuration @ActiveProfiles("test") public class H2Mock { @Value("${h2.dbName:Test1}") String dbName; @Value("${h2.dbSchema:db/schema.sql}") String dbSchema; @Bean

Spring(三)装配Bean:手动装配Bean

元气小坏坏 提交于 2020-03-19 19:13:53
3 月,跳不动了?>>> 创建应用对象之间的协作关系的行为通常被称作 装配 ,这也是依赖注入的本质。 在spring中装配bean的方式有两种, 手动装配 和 自动装配 ,手动装配顾名思义就是每一个bean都是自己写到xml里面,二自动装配的方式有两种,按类型装配和按名字装配 1、手动装配的例子 有三个类,一个是Person的基类,另两个类是服务于Person类的分别是Address和Car,先看这三个类: Person.java package com.roger.spring.beans public class Person { private String name; private Address address; private Car car; public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public Car getCar() { return car; } public void setCar

Not registered via @EnableConfigurationProperties or marked as Spring component

久未见 提交于 2020-03-19 05:33:15
SpringBoot中,将类中的属性和配置文件中的配置进行绑定时出现以下的问题: 当使用@ConfigurationProperties时IDEA顶部出现这样的提示: 按照提示点击跳转到官方文档,接着在pom.xml中添加如下的配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> 添加完后的效果是,当你写配置文件(yml,properties配置文件)时会有相关的提示 上面弄完后@ConfigurationProperties下面还有报错,按照提示可以看到 Not registered via @EnableConfigurationProperties or marked as Spring component,网上找到的博客有说要添加 @EnableConfigurationProperties(Person.class)【此时的Person是自定义的bean】, 添加后错误确实是没了,但是在SpringBoot的单元测试时会看到如下的错误:Could not autowire. No beans of

Spring和Mybatis整合异常:expected at least 1 bean which qualifies as autowire candidate for this dependency.

五迷三道 提交于 2020-03-19 00:14:50
记录一下    —— 当 Mapper(dao) 接口与 Mapper.xml 文件不在同一文件下时 , 需要在 Spring 配置文件中配置将 Mapper(dao) 接口加到 MapperScannerConfigurer 中 。 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.xxw.dao" /> </bean> 异常截图 异常源码 [org.springframework.web.context.ContextLoader] - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com

JSF---->标准转换器(Converter)

亡梦爱人 提交于 2020-03-18 21:58:13
转换器(Converter)协助模型与视图之间的数据转换 标准转换器 Web应用程序与浏览器之间是使用HTTP进行沟通,所有传送的数据基本上都是字符串文字,而Java应用程序本身基本上则是对象,所以对象数据必须经由转换传送给浏览器,而浏览器送来的数据也必须转换为对象才能使用。 JSF定义了一系列标准的转换器(Converter),对于基本数据型态(primitive type)或是其Wrapper类别,JSF会使用javax.faces.Boolean、javax.faces.Byte、 javax.faces.Character、javax.faces.Double、javax.faces.Float、 javax.faces.Integer、javax.faces.Long、javax.faces.Short等自动进行转换,对于 BigDecimal、BigInteger,则会使用javax.faces.BigDecimal、javax.faces.BigInteger自动进行转换。 至于DateTime、Number,我们可以使用 <f:convertDateTime>、<f:convertNumber>标签 进行转换,它们各自提供有一些简单的属性,可以让我们在转换时指定一些转换的格式细节。 来看个简单的例子,首先我们定义一个简单的Bean: UserBean.java

Spring注解

徘徊边缘 提交于 2020-03-18 19:47:06
3 月,跳不动了?>>> 一、Bean的生命周期 流程 Bean创建 —— 初始化 —— 销毁 创建: 单实例:在容器启动时创建对象 多实例:每次调用时创建对象 初始化: 都是在对象创建完成后,调用初始化方法 销毁: 单实例:容器关闭时,调用销毁方法 多实例:容器不会管理这个bean,只能手动调用销毁方法 实现方式 在 @Bean 注解上指定初始化( initMethod )、销毁方法( destroyMethod ) @Bean(initMethod = "init", destroyMethod = "destroy") public Car car(){ return new Car(); } 让Bean实现 InitializingBean 和 DisposableBean 接口,重写它们的方法 public class Cat implements InitializingBean, DisposableBean { public Cat() { System.out.println("Cat...Construct..."); } @Override public void afterPropertiesSet() throws Exception { System.out.println("Cat...init..."); } @Override public

谈谈你对spring框架的理解?

无人久伴 提交于 2020-03-18 17:48:49
我认为spring 就是一个框架的集成器,通常使用spring 来管理action 层和DAO 层。Spring本身有很多的组件,比如:MVC、IOC、AOP、DaoSupport等等。IOC 本身也就是一个容器,它管理了所有的bean 和bean 之间的依赖关系。 IOC 也叫作控制反转,核心是BeanFactory。也就意味着IOC 是基于工厂模式设计的,同时这个工厂生产的bean 默认是单例的。如果想修改单例变成多实例,则需要修改bean 的scope属性,值是prototype。在没有使用IOC 以前,程序员需要自己在对应的类中new 相关依赖的对象。 比如UserAction依赖于UserService完成业务操作,而UserService又依赖于UserDAO完成数据库操作。所以需要在action 中new servcie,在service 中new DAO。这样的方式,是由程序员来管理了对象的生命周期和他们之间的依赖关系,耦合度很高,不利于程序的拓展。所以通过IOC 来管理bean 和依赖关系,可以解耦合。 我们将所有的action、service 和dao等类定义成IOC 的一个bean 组件,此时类的实例化就交给了IOC 的beanFactory,由工厂来负责实例化bean 的对象。IOC 有三种注入方式,属性注入、构造器注入和接口注入。接口注入只是spring

论Spring中循环依赖的正确性与Bean注入的顺序关系

丶灬走出姿态 提交于 2020-03-18 12:24:00
某厂面试归来,发现自己落伍了!>>> 一、前言 最近在做项目时候遇到一个奇葩问题,就是bean依赖注入的正确性与bean直接注入的顺序有关系,但是正常情况下明明是和顺序没关系的啊,究竟啥情况那,不急,让我一一道来。 二、普通Bean循环依赖-与注入顺序无关 2.1 循环依赖例子与原理 public class BeanA { private BeanB beanB; public BeanB getBeanB() { return beanB; } public void setBeanB(BeanB beanB) { this.beanB = beanB; } } public class BeanB { private BeanA beanA; public BeanA getBeanA() { return beanA; } public void setBeanA(BeanA beanA) { this.beanA = beanA; } } <bean id="beanA" class="com.alibaba.test.circle.BeanA"> <property name="beanB"> <ref bean="beanB" /> </property> </bean> <bean id="beanB" class="com.alibaba.test.circle

几种spring 获取bean的方法

笑着哭i 提交于 2020-03-18 10:57:27
某厂面试归来,发现自己落伍了!>>> 获得spring里注册Bean的四种方法,特别是第三种方法,简单: 一:方法一(多在struts框架中)继承BaseDispatchAction import com.mas.wawacommunity.wap.service.UserManager; public class BaseDispatchAction extends DispatchAction { /** * web应用上下文环境变量 */ protected WebApplicationContext ctx; protected UserManager userMgr; /** * 获得注册Bean * @param beanName String 注册Bean的名称 * @return */ protected final Object getBean(String beanName) { return ctx.getBean(beanName); } protected ActionForward unspecified(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse

spring扩展点之一:BeanFactoryPostProcessor和BeanPostProcessor

痞子三分冷 提交于 2020-03-18 05:25:08
一、BeanFactoryPostProcessor和BeanPostProcessor的区别 BeanFactoryPostProcessor和BeanPostProcessor都是 spring初始化bean的扩展点 。两个接口非常相似。 BeanFactoryPostProcessor可以对bean的定义(配置元数据)进行处理。也就是说,Spring IoC容器允许BeanFactoryPostProcessor在容器实际实例化任何其它的bean之前读取配置元数据,并有可能修改它。如果你愿意,你可以配置多个BeanFactoryPostProcessor。你还能通过设置'order'属性来控制BeanFactoryPostProcessor的执行次序。 注册BeanFactoryPostProcessor的实例,需要重载void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException; 通过beanFactory可以获取bean的示例或定义等。同时可以修改bean的属性,这是和BeanPostProcessor最大的区别。 例如: BeanDefinition bd = beanFactory.getBeanDefinition("xxBean");