SpringBoot2核心技术-基础入门--day03


2.容器功能

2.1组件的添加

1)@Configuration

@Configuration 注解是将一个配置类定义成注解类,注解类中可以包含一个或者多个@Bean注解,一个@Configuration注解类就相当于一个XML配置文件,一个@Bean注解就相当于一个标签。其作用是:配置Spring容器,将组件添加到容器中并启动Spring容器。

2)@Bean、@Component、@Controller、@Service、@Repository

@Bean 注解是申明一个组件,然后配合@Configuration 注解使用,将组件添加到IOC容器中,交给容器处理。默认是用方法名首字母小写作为组件名,也可以@Bean("name")来自定义组件名。通过@Scope 注解来定义该组件实力在容器中是单例还是多例,默认是单例的,@Scope("prototype") 则是多例的。

@Configuration
public class AppConfigWithAliasAndScope {

    /**
     * 为myBean起两个名字,b1 和 b2
     * @Scope 默认为 singleton,但是可以指定其作用域
     * prototype 是多例的,即每一次调用都会生成一个新的实例。
     */
    @Bean({"b1","b2"})
    @Scope("prototype")
    public MyBean myBean(){
        return new MyBean();
    }
}

@Component、@Controller、@Service、@Repository 注解 都是将我们定义的类或者pojo对象添加到容器中。
@Controller、@Service、@Repository 注解分别是作用在控制层、服务层以及持久层(数据访问层),如果不属于以上三种的组件需要添加到容器中可以使用@Repository 注解。
这里要说一下@Component 这些注解与@Autowired 注解配合使用时的一个小坑:
如果在一个类中需要从容器中拿到一个组件,我们通常会使用@Autowired 注解,在使用@Autowired 注解后,这个类也需要交给Spring容器中即在这个类上加上@Component 注解,否则Spring会报错。

3)@ComponentScan、@Import

@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中,默认路径时主程序所在的包或子包下面,也可以自定义路径:

/**
 * 主配置类  包扫描com.zhang
 *
 * @author zhangqh
 * @date 2018年5月12日
 */
@ComponentScan(value="com.zhang")
@Configuration
public class MainScanConfig {
}

@Import 注解的用法:

第一种用法:直接填class数组

直接填对应的class数组,class数组可以有0到多个。

@Import({ 类名.class , 类名.class... })
public class TestDemo {
}

第二种用法:ImportSelector方式

第一步:创建Myclass类并实现ImportSelector接口,这里用于演示就添加一个全类名给其返回值

public class Myclass implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{"com.yc.Test.TestDemo3"};
    }
}

第二步:编写TestDemo 类,并标注上使用ImportSelector方式的Myclass类

@Import({TestDemo2.class,Myclass.class})
public class TestDemo {
        @Bean
        public AccountDao2 accountDao2(){
            return new AccountDao2();
        }

}

4)@Conditional

@Conditional 注解是Sprin4的一个新特性,他的作用是按照一定条件进行判断,然后给容器注册bean,这是从网上down的图片,仅供参考。

大部分的注解是根据字面意思来规定。

2.1 Spring中的配置文件

yaml文件中,添加自定义文件时,一般都没有提示,添加下面依赖即可。然后再build标签中添加下面配置,打包的时候就会将项目中不需要的包剔除掉。
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        

 
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.springframework.boot
                            spring-boot-configuration-processor