参考自:《深入浅出Spring Boot 2.x》第三章节
总结:
- IOC(Inversion of control)容器是Spring核心,Spring是基于IOC容器编程的框架。
- IOC是一种通过描述来生成或者获取对象的技术:
- 通过描述管理Bean,包括发布和获取Bean。
- 通过描述完成Bean之间的依赖关系。
1. IOC容器说明
- Spring IOC容器是一个管理Bean的容器。
- Spring中,它要求所有的IOC容器必须实现接口BeanFactory(顶层的容器接口)。
代码清单1 BeanFactory接口源码
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package org.springframework.beans.factory;
import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;
import org.springframework.lang.Nullable;
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String var1) throws BeansException;
<T> T getBean(String var1, Class<T> var2) throws BeansException;
Object getBean(String var1, Object... var2) throws BeansException;
<T> T getBean(Class<T> var1) throws BeansException;
<T> T getBean(Class<T> var1, Object... var2) throws BeansException;
<T> ObjectProvider<T> getBeanProvider(Class<T> var1);
<T> ObjectProvider<T> getBeanProvider(ResolvableType var1);
boolean containsBean(String var1);
boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;
boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String var1, ResolvableType var2) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;
@Nullable
Class<?> getType(String var1) throws NoSuchBeanDefinitionException;
@Nullable
Class<?> getType(String var1, boolean var2) throws NoSuchBeanDefinitionException;
String[] getAliases(String var1);
}
上述代码大致分为如下这几类接口:
- 通过不同的描述获取Bean(名称、Class、参数、类型等)
- 判断Bean类型(是否为单例、是否为原型)
- 判断Bean的ResolvableType类型匹配
这里也就映衬了开头所说的IOC是一种通过描述来生成或者获取对象的技术。
由于BeanFactory功能不够强大,Spring又在此基础上设计了更高级的接口ApplicationContext。它是BeanFactory子接口,关系如下图:
ApplicationContext接口通过继承上级接口,进而继承BeanFactory,在BeanFactory之上扩展了:
- 消息国际化接口MesssageSource
- 环境可配置接口EnvironmentCapable
- 应用事件发布接口ApplicationEventPublisher
- 资源模式解析接口ResourcePatternResolver
2. Bean装配
Spring中允许用户通过XML或者JAVA配置装配Bean,下面简单介绍SpringBoot的注解方式(JAVA配置)。
装配Bean的方式有如下几种(SpringBoot):
- 配置类中定义@Bean注解(一般作用于第三方的包)
- @Component和@ComponentScan结合
注解名 | 解释 |
---|---|
@ComponentScan | 标明采用何种策略扫描装配Bean |
@Component | 标明哪个类需要被扫描进入Spring IOC容器中 |
代码清单2 加入@Component
package projectb.springboot.entity;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @Author LynHB
* @Description : 测试Bean装配
* @Date 13:03 2020/6/16
**/
@Component("user")
@Getter
@Setter
public class User {
@Value("1")
private Long id;
@Value("user_name_1")
private String userName;
@Value("note_1")
private String note;
}
(这里用到了@Getter和@Setter注解,是lombok提供的,自动生成getter和setter)
这里的@Component表示该类需要被Spring IOC容器进行装配,其“user”代表Bean名称,你也可以不配置该字符串,IOC会将类名第一个字母作为小写进行装配名称。@Value指定具体的值,使得IOC给予对应属性注入对应的值,为了让IOC装配该类,还需要让Config类能够扫描到这个类。
@ComponentScan对应的属性 | 作用 |
---|---|
无属性 | 扫描对应配置类当前包及其子包 |
basePackages | 设置需要扫描的包路径数组 |
basePackageClasses | 设置需要扫描的类数组 |
@ComponentScan("xxxx") | 默认设置的是basePackages,可结合*代表该路径下的全部 |
excludeFilters | 设置需要过滤掉的信息,例如excludeFilters = {@Filter(classes = {Service.class})},排除Service.class,可查阅官方文档 |
代码清单3 加入注解@ComponentScan
package projectb.springboot.config;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import projectb.springboot.entity.User;
/**
* @Author LynHB
* @Description : spring配置类
* @Date 13:17 2020/6/16
**/
@Configuration
@ComponentScan(basePackages = {"projectb.springboot.entity"})
public class AppConfig {
public static void main(String[] args){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
User user = (User)applicationContext.getBean("user");
System.out.println(user.getId()+" "+user.getNote()+" "+user.getUserName());
}
}
--------------------------
13:41:39.974 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2d6e8792
13:41:40.036 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor'
13:41:40.256 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\User.class]
13:41:40.590 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor'
13:41:40.596 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory'
13:41:40.600 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor'
13:41:40.604 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor'
13:41:40.627 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appConfig'
13:41:40.641 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'user'
1 note_1 user_name_1
Process finished with exit code 0
3. 依赖注入
介绍注解:
注解名 | 注解作用 |
---|---|
@Autowired | 根据属性类型(By type)找到对应Bean进行注入,如果找到多个Bean则会报错,可以设置required=false,当无法确定Bean时为null。 |
@Primary | 通过@Autowired找到多个Bean时,设置一个高优先级的Bean注入 |
@Quelifier | 通过Bean名称找到对应的Bean注入,结合Autowired使用 |
还是挺简单的,不做代码说明了。
4 生命周期
这节,我们来说说Bean的生命周期。
Bean的初始化如下:
- 资源定位:Spring通过配置(@ComponentScan)找到带有@Component的类,即为一个资源定位过程。
- Bean定义:找到资源后,开始解析,并将定义信息保存至BeanDefinition 实例中。
- 发布Bean: 将Bean的定义发布到Spring IOC容器中,此时IOC只有Bean的定义,没有Bean的实例。
- 实例化:默认情况下,Spring会继续去完成Bean的实例化,可以通过lazyInit=true在@ComponentScan中配置,进行延迟初始化(默认不会进行延迟初始化)
- 依赖注入:默认情况下,Spring也会继续完成DI操作,将@AutoWired中的属性值。
如果仅仅是实例化和依赖注入,那么还不能实现自定义要求,Spring在完成依赖注入后,还提供了一系列的接口和配置来完成Bean的初始化,如图所示:
Spring Bean的生命周期
有以下两点需要注意的是:
- BeanPostProcessor针对的是所有的Bean,其他的都是针对单个Bean的设置。
- 即使你定义了ApplicationContextAware接口,有时候也不一定被调用,原因在于:实现BeanFactory是最低要求,但是没有强制要求一定要实现ApplicationContext接口,只有实现ApplicationContext接口的容器,才会在生命周期内调用ApplicationContextAware所定义的setApplicationContext方法。
代码清单4-1 测试生命周期-主配置类
package projectb.springboot.config;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import projectb.springboot.entity.Animal;
import projectb.springboot.entity.User;
/**
* @Author LynHB
* @Description : spring配置类
* @Date 13:17 2020/6/16
**/
@Configuration
@ComponentScan(basePackages = {"projectb.springboot"})
public class AppConfig {
public static void main(String[] args){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
applicationContext.close();
}
}
代码清单4-2 测试生命周期-主测试类
package projectb.springboot.entity;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class BussinessPerson implements People,
BeanNameAware,
BeanFactoryAware,
ApplicationContextAware,
InitializingBean,
DisposableBean {
private Animal animal = null;
@Override
public void service() {
this.animal.use();
}
@Override
@Autowired
@Qualifier("dog")
public void setAnimal(Animal animal) {
this.animal = animal;
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("["+this.getClass().getSimpleName()+"]调用BeanFactoryAware的setBeanFactory");
}
@Override
public void setBeanName(String s) {
System.out.println("["+this.getClass().getSimpleName()+"]调用BeanNameAware的setBeanName");
}
@Override
public void destroy() throws Exception {
System.out.println("["+this.getClass().getSimpleName()+"]调用DisposableBean的destroy");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("["+this.getClass().getSimpleName()+"]调用InitializingBean的afterPropertiesSet");
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("["+this.getClass().getSimpleName()+"]调用ApplicationContextAware的setApplicationContext");
}
@PostConstruct
public void init(){
System.out.println("["+this.getClass().getSimpleName()+"]调用PostConstruct");
}
@PreDestroy
public void destroy1(){
System.out.println("["+this.getClass().getSimpleName()+"]调用PreDestroy");
}
}
代码清单4-3 测试生命周期-主测试类顶层接口类
package projectb.springboot.entity;
public interface People {
public void service();
public void setAnimal(Animal animal);
}
代码清单4-4 测试生命周期-animal类及相关实现类
package projectb.springboot.entity;
public interface Animal {
public void use();
}
--------------------------------------------
package projectb.springboot.entity;
import org.springframework.stereotype.Component;
@Component
public class Cat implements Animal {
@Override
public void use() {
System.out.println("Cat is catch mouses");
}
}
---------------------------------------------
package projectb.springboot.entity;
import org.springframework.stereotype.Component;
@Component
public class Dog implements Animal {
@Override
public void use() {
System.out.println("Dog is wa wa wa");
}
}
代码清单4-5 测试生命周期-BeanPostProcessor类
package projectb.springboot.processor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
@Component
public class BeanPostProcessorExample implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("BeanPostProcessor调用BeanPostProcessorExample"+
"参数:"+bean.getClass()+" "+beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("BeanPostProcessor调用postProcessAfterInitialization"+
"参数:"+bean.getClass()+" "+beanName);
return bean;
}
}
代码目录结构
执行结果如下:
"C:\Program Files\Java\jdk-14.0.1\bin\java.exe" "-javaagent:D:\IntelliJ IDEA 2020.1.2\lib\idea_rt.jar=51117:D:\IntelliJ IDEA 2020.1.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Huang\IdeaProjects\springboot\target\classes;C:\Users\Huang\.m2\repository\org\springframework\boot\spring-boot-starter\2.3.1.RELEASE\spring-boot-starter-2.3.1.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\boot\spring-boot\2.3.1.RELEASE\spring-boot-2.3.1.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-context\5.2.7.RELEASE\spring-context-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-aop\5.2.7.RELEASE\spring-aop-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-beans\5.2.7.RELEASE\spring-beans-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-expression\5.2.7.RELEASE\spring-expression-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.3.1.RELEASE\spring-boot-autoconfigure-2.3.1.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.3.1.RELEASE\spring-boot-starter-logging-2.3.1.RELEASE.jar;C:\Users\Huang\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Huang\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Huang\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;C:\Users\Huang\.m2\repository\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;C:\Users\Huang\.m2\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;C:\Users\Huang\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-core\5.2.7.RELEASE\spring-core-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-jcl\5.2.7.RELEASE\spring-jcl-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;C:\Users\Huang\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\Huang\.m2\repository\org\projectlombok\lombok\1.18.10\lombok-1.18.10.jar projectb.springboot.config.AppConfig
15:59:24.939 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2d6e8792
15:59:24.969 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor'
15:59:25.118 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\SpringbootApplication.class]
15:59:25.128 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\BussinessPerson.class]
15:59:25.129 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\Cat.class]
15:59:25.131 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\Dog.class]
15:59:25.132 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\User.class]
15:59:25.134 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\processor\BeanPostProcessorExample.class]
15:59:25.213 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\config\AppConfig.class]
15:59:25.213 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\BussinessPerson.class]
15:59:25.214 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\Cat.class]
15:59:25.215 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\Dog.class]
15:59:25.216 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\User.class]
15:59:25.217 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\processor\BeanPostProcessorExample.class]
15:59:26.064 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'propertySourcesPlaceholderConfigurer'
15:59:26.096 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.properties.ConfigurationPropertiesBeanDefinitionValidator'
15:59:26.159 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor'
15:59:26.163 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory'
15:59:26.169 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor'
15:59:26.170 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor'
15:59:26.176 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor'
15:59:26.177 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.internalConfigurationPropertiesBinder'
15:59:26.177 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.internalConfigurationPropertiesBinderFactory'
15:59:26.181 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'beanPostProcessorExample'
15:59:26.200 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appConfig'
BeanPostProcessor调用BeanPostProcessorExample参数:class projectb.springboot.config.AppConfig$$EnhancerBySpringCGLIB$$15e20f17 appConfig
BeanPostProcessor调用postProcessAfterInitialization参数:class projectb.springboot.config.AppConfig$$EnhancerBySpringCGLIB$$15e20f17 appConfig
15:59:26.202 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'springbootApplication'
BeanPostProcessor调用BeanPostProcessorExample参数:class projectb.springboot.SpringbootApplication$$EnhancerBySpringCGLIB$$dd3e853d springbootApplication
BeanPostProcessor调用postProcessAfterInitialization参数:class projectb.springboot.SpringbootApplication$$EnhancerBySpringCGLIB$$dd3e853d springbootApplication
15:59:26.204 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'bussinessPerson'
15:59:26.273 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'dog'
BeanPostProcessor调用BeanPostProcessorExample参数:class projectb.springboot.entity.Dog dog
BeanPostProcessor调用postProcessAfterInitialization参数:class projectb.springboot.entity.Dog dog
[BussinessPerson]调用BeanNameAware的setBeanName
[BussinessPerson]调用BeanFactoryAware的setBeanFactory
[BussinessPerson]调用ApplicationContextAware的setApplicationContext
BeanPostProcessor调用BeanPostProcessorExample参数:class projectb.springboot.entity.BussinessPerson bussinessPerson
[BussinessPerson]调用PostConstruct
[BussinessPerson]调用InitializingBean的afterPropertiesSet
BeanPostProcessor调用postProcessAfterInitialization参数:class projectb.springboot.entity.BussinessPerson bussinessPerson
15:59:26.280 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'cat'
BeanPostProcessor调用BeanPostProcessorExample参数:class projectb.springboot.entity.Cat cat
BeanPostProcessor调用postProcessAfterInitialization参数:class projectb.springboot.entity.Cat cat
15:59:26.281 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'user'
BeanPostProcessor调用BeanPostProcessorExample参数:class projectb.springboot.entity.User user
BeanPostProcessor调用postProcessAfterInitialization参数:class projectb.springboot.entity.User user
15:59:26.303 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.AutoConfigurationPackages'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages org.springframework.boot.autoconfigure.AutoConfigurationPackages
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages org.springframework.boot.autoconfigure.AutoConfigurationPackages
15:59:26.319 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
15:59:26.322 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration'
15:59:26.323 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration' via constructor to bean named 'org.springframework.beans.factory.support.DefaultListableBeanFactory@1a38c59b'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration
15:59:26.334 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.aop.AopAutoConfiguration'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.aop.AopAutoConfiguration org.springframework.boot.autoconfigure.aop.AopAutoConfiguration
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.aop.AopAutoConfiguration org.springframework.boot.autoconfigure.aop.AopAutoConfiguration
15:59:26.336 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration
15:59:26.339 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'applicationAvailability'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.availability.ApplicationAvailabilityBean applicationAvailability
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.availability.ApplicationAvailabilityBean applicationAvailability
15:59:26.346 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
15:59:26.349 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.properties.BoundConfigurationProperties'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.context.properties.BoundConfigurationProperties org.springframework.boot.context.properties.BoundConfigurationProperties
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.context.properties.BoundConfigurationProperties org.springframework.boot.context.properties.BoundConfigurationProperties
15:59:26.351 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
15:59:26.377 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration
15:59:26.380 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'lifecycleProcessor'
15:59:26.383 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.context.LifecycleProperties spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.context.LifecycleProperties spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties
15:59:26.420 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'lifecycleProcessor' via factory method to bean named 'spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.context.support.DefaultLifecycleProcessor lifecycleProcessor
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.context.support.DefaultLifecycleProcessor lifecycleProcessor
15:59:26.423 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration'
15:59:26.441 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.info.ProjectInfoProperties spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.info.ProjectInfoProperties spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties
15:59:26.449 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration' via constructor to bean named 'spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration
15:59:26.453 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration
15:59:26.455 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'taskExecutorBuilder'
15:59:26.456 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.task.TaskExecutionProperties spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.task.TaskExecutionProperties spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties
15:59:26.464 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'taskExecutorBuilder' via factory method to bean named 'spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.task.TaskExecutorBuilder taskExecutorBuilder
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.task.TaskExecutorBuilder taskExecutorBuilder
15:59:26.478 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration
15:59:26.534 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'taskSchedulerBuilder'
15:59:26.544 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.autoconfigure.task.TaskSchedulingProperties spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.autoconfigure.task.TaskSchedulingProperties spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties
15:59:26.555 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'taskSchedulerBuilder' via factory method to bean named 'spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties'
BeanPostProcessor调用BeanPostProcessorExample参数:class org.springframework.boot.task.TaskSchedulerBuilder taskSchedulerBuilder
BeanPostProcessor调用postProcessAfterInitialization参数:class org.springframework.boot.task.TaskSchedulerBuilder taskSchedulerBuilder
Process finished with exit code 0
有时候bean可以定义第三方的类,此时可以使用注解@Bean来定义初始化和销毁方法(等价于@PostConstruct和@PreDestroy):
@Bean(initMethod = "init",destroyMethod = "destroy")
5. 属性配置
三个注解:
注解名 | 作用 |
---|---|
@Value("${属性全路径}") | 配置文件定义一个属性,然后通过@Value("${属性全路径}") |
@ConfigurationProperties("属性") | 来定义一个类的属性 |
@PropertySource | 如果不是在主配置文件中使用@PropertySource注解来定位具体的配置文件,示例:@PropertySource(value="{classpath:jdbc.properties}",ignoreResourceNotFound=true) |
6 Bean条件装配
会存在客观原因导致Bean无法被初始化,此时希望系统不去装载该Bean。Spring提供了@Conditional注解帮助实现,需要配合实现一个Condition接口(编写boolean的maches())来完成。
我们来编写一个Machine的Bean,只有当是Linux操作系统时才会装配:
代码清单-5 条件装配
package projectb.springboot.entity;
public class Machine {
}
---------------------------
package projectb.springboot.config;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;
import projectb.springboot.entity.Animal;
import projectb.springboot.entity.Machine;
import projectb.springboot.entity.User;
/**
* @Author LynHB
* @Description : spring配置类
* @Date 13:17 2020/6/16
**/
@Configuration
@ComponentScan(basePackages = {"projectb.springboot"})
public class AppConfig {
@Bean
@Conditional(MachineConditional.class)
public Machine getLinuxMachine(){
return new Machine();
}
public static void main(String[] args){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
System.out.println(applicationContext.getBean(Machine.class));
}
}
-------------------------------------------
package projectb.springboot.config;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class MachineConditional implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return System.getProperty("os.name").toLowerCase().contains("linux");
}
}
输出:
"C:\Program Files\Java\jdk-14.0.1\bin\java.exe" "-javaagent:D:\IntelliJ IDEA 2020.1.2\lib\idea_rt.jar=51646:D:\IntelliJ IDEA 2020.1.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Huang\IdeaProjects\springboot\target\classes;C:\Users\Huang\.m2\repository\org\springframework\boot\spring-boot-starter\2.3.1.RELEASE\spring-boot-starter-2.3.1.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\boot\spring-boot\2.3.1.RELEASE\spring-boot-2.3.1.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-context\5.2.7.RELEASE\spring-context-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-aop\5.2.7.RELEASE\spring-aop-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-beans\5.2.7.RELEASE\spring-beans-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-expression\5.2.7.RELEASE\spring-expression-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.3.1.RELEASE\spring-boot-autoconfigure-2.3.1.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.3.1.RELEASE\spring-boot-starter-logging-2.3.1.RELEASE.jar;C:\Users\Huang\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Huang\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Huang\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;C:\Users\Huang\.m2\repository\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;C:\Users\Huang\.m2\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;C:\Users\Huang\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-core\5.2.7.RELEASE\spring-core-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\springframework\spring-jcl\5.2.7.RELEASE\spring-jcl-5.2.7.RELEASE.jar;C:\Users\Huang\.m2\repository\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;C:\Users\Huang\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\Huang\.m2\repository\org\projectlombok\lombok\1.18.10\lombok-1.18.10.jar projectb.springboot.config.AppConfig
16:35:44.456 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2d6e8792
16:35:44.486 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor'
16:35:44.676 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\SpringbootApplication.class]
16:35:44.698 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\Cat.class]
16:35:44.700 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\Dog.class]
16:35:44.703 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\User.class]
16:35:44.778 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\config\AppConfig.class]
16:35:44.779 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\Cat.class]
16:35:44.781 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\Dog.class]
16:35:44.782 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\Huang\IdeaProjects\springboot\target\classes\projectb\springboot\entity\User.class]
16:35:45.601 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'propertySourcesPlaceholderConfigurer'
16:35:45.613 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.properties.ConfigurationPropertiesBeanDefinitionValidator'
16:35:45.640 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor'
16:35:45.642 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory'
16:35:45.645 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor'
16:35:45.646 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor'
16:35:45.651 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor'
16:35:45.652 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.internalConfigurationPropertiesBinder'
16:35:45.652 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.internalConfigurationPropertiesBinderFactory'
16:35:45.661 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appConfig'
16:35:45.674 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'springbootApplication'
16:35:45.676 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'cat'
16:35:45.677 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'dog'
16:35:45.678 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'user'
16:35:45.716 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.AutoConfigurationPackages'
16:35:45.730 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration'
16:35:45.735 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration'
16:35:45.739 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration' via constructor to bean named 'org.springframework.beans.factory.support.DefaultListableBeanFactory@1a38c59b'
16:35:45.749 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.aop.AopAutoConfiguration'
16:35:45.759 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration'
16:35:45.760 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'applicationAvailability'
16:35:45.767 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration'
16:35:45.768 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.properties.BoundConfigurationProperties'
16:35:45.769 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata'
16:35:45.771 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration'
16:35:45.773 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'lifecycleProcessor'
16:35:45.779 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties'
16:35:45.914 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'lifecycleProcessor' via factory method to bean named 'spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties'
16:35:45.918 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration'
16:35:45.933 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties'
16:35:45.936 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration' via constructor to bean named 'spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties'
16:35:45.937 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration'
16:35:45.938 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'taskExecutorBuilder'
16:35:45.940 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties'
16:35:45.947 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'taskExecutorBuilder' via factory method to bean named 'spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties'
16:35:45.956 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration'
16:35:45.962 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'taskSchedulerBuilder'
16:35:45.964 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties'
16:35:45.970 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'taskSchedulerBuilder' via factory method to bean named 'spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties'
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'projectb.springboot.entity.Machine' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:352)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1127)
at projectb.springboot.config.AppConfig.main(AppConfig.java:25)
Process finished with exit code 1
网友评论