Spring Boot 笔记 003 Bean注册

使用Idea导入第三方jar包

Spring Boot 笔记 003 Bean注册_第1张图片

在porn.xml种添加的第三方jar包依赖,并刷新

Spring Boot 笔记 003 Bean注册_第2张图片

可以在启动类中尝试调用

Spring Boot 笔记 003 Bean注册_第3张图片

以上放到启动类中,不推荐,建议创建一个专门定义的类

Spring Boot 笔记 003 Bean注册_第4张图片

package com.geji.config;

import cn.itcast.pojo.Country;
import cn.itcast.pojo.Province;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;



@Configuration
public class CommonConfig {
    //注入Country对象
    @Bean
    public Country country(){
        return new Country();
    }

    //对象默认的名字是方法名
    @Bean
//  @Bean(“aa”)也可以改默认的对象名
    public Province province(){
        return new Province();
    }
}

在入口文件中调用(注意调用默认的是类名,也可以通过@Bean("aa")起别名)

Spring Boot 笔记 003 Bean注册_第5张图片

以上因为在入口文件的同级目录下会自动扫描,所以可以直接用,如果不在同级目录,需要使用import

Spring Boot 笔记 003 Bean注册_第6张图片

以上,如果有很多类,就会非常的臃肿,所以,做一些封装

定义一个文件

Spring Boot 笔记 003 Bean注册_第7张图片

定义一个类实现ImportSelector接口,并且读取刚刚配置的文件

Spring Boot 笔记 003 Bean注册_第8张图片

package config;

import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
//ctrl alt tal
//alt enter
public class CommonImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        List imports=new ArrayList<>();
        InputStream is=CommonImportSelector.class.getClassLoader().getResourceAsStream("common.imports");
        BufferedReader br=new BufferedReader(new InputStreamReader(is));
        String line=null;

        try {
                while((line=br.readLine())!=null){
                    imports.add(line);
            }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(br!=null){
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
//        return new String[]{"config.CommonConfig"};
        return imports.toArray(new String[0]);
    }
}

以上,可以通过在启动类添加@import(CommonImportSelector )注解调用,但是后面有可能还有其他注解,进一步对注解进行封装,创建注解类

Spring Boot 笔记 003 Bean注册_第9张图片

package anno;

import config.CommonImportSelector;
import org.springframework.context.annotation.Import;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//表示可以在类上面使用
@Target(ElementType.TYPE)
//表示运行时可用
@Retention(RetentionPolicy.RUNTIME)
@Import(CommonImportSelector.class)
public @interface EnableCommonConfig {

}

入口文件调用注解类

Spring Boot 笔记 003 Bean注册_第10张图片

运行成功

Spring Boot 笔记 003 Bean注册_第11张图片

你可能感兴趣的:(Spring,Boot,spring,boot,笔记,后端)