2.容器功能
2.1组件的添加
1)@Configuration
@Configuration 注解是将一个配置类定义成注解类,注解类中可以包含一个或者多个@Bean注解,一个@Configuration注解类就相当于一个XML配置文件,一个@Bean注解就相当于一个
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标签中添加下面配置,打包的时候就会将项目中不需要的包剔除掉。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>