Spring 裝配類的幾種方法

一.前言

      

二.將一個類交由spring管理的方法

1. @bean html

2. @Controller, @Service, @Component .....等配合@ComponentScanjava

3. @Configuration 配合@EnableAutoConfigurationspring

4. @Import(Class<?>[] values)bash

//Teacher是一個普通的java類,沒有任何註解修飾
@Import(Teacher.class)
@EnableEurekaClient
@SpringBootApplication
public class ApplicationClientOne {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(ApplicationClientOne.class, args);
        System.out.println("================================================================================");
        System.out.println(run.getBean(Teacher.class).toString());
    }
}



public class Teacher {

    private  String name = "123";

    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;

    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Teacher{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}

啓動日誌:app

2018-08-17 15:18:29.481  INFO 113988 --- [           main] c.r.a.one.ApplicationClientOne           : Started ApplicationClientOne in 15.53 seconds (JVM running for 16.384)
================================================================================
Teacher{name='123', age=null}
2018-08-17 15:18:29.808  INFO 113988 --- [on(8)-127.0.0.1] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:7001

5.  實現接口 ImportSelectoride

public interface ImportSelector {

	/**
	 * Select and return the names of which class(es) should be imported based on
	 * the {@link AnnotationMetadata} of the importing @{@link Configuration} class.
	 */
	String[] selectImports(AnnotationMetadata importingClassMetadata);

}

使用方法:post

public class TestImportSelect implements ImportSelector {

    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{"com.river.application.one.test.Teacher"};
    }
}

這樣,就已經將該java類交由spring管理了,能夠經過getBean()方法獲得;this

6. 利用spring的鉤子接口  BeanDefinitionRegistryPostProcessorspa

@Component
public class TestBeanRegister implements BeanDefinitionRegistryPostProcessor {

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition();
        rootBeanDefinition.setBeanClass(Teacher.class);
        registry.registerBeanDefinition("teacher",rootBeanDefinition);
    }


    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

    }
}

7. spring.factories.net

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.river.application.one.test.Teacher

啓動過程參考SpringBoot實戰之SpringBoot自動配置原理

相關文章
相關標籤/搜索