@Configuration
@import({Colour.class, Red.class,MyimportSelector.class,MyimportBeanDefinitionRegistrar.class})
public class MainConfig {
@Scope("prototype")
@Bean
public Person person(){
System.out.println("person对象的创建过程..............");
return new Person("nieyp","24");
}
}
2.@Lazy:是否懒加载
@Configuration
public class MainConfig {
@Lazy
@Bean
public Person person(){
System.out.println("person对象的创建过程..............");
return new Person("nieyp","24");
}
}
3.@AutoWired
//例1
public class Person {
private String name;
private String age;
private City city;
public City getCity() {
return city;
}
@Autowired
//标注在方法上,Spring容器创建当前对象,就会调用方法,完成赋值
//方法使用的参数,自定义类型的从IOC容器中获取(标注在有参构造上上同理(如果只有一个有参构造器,@AutoWired可以省略),也可以直接放在参数位置)
public void setCity(City city) {
this.city = city;
}
}
//例2(前提是car和student已经注册到了Ioc容器中)
@Bean
public Person1 person1(Car car, Student student){
return new Person1(car,student);
}
4.Bean的初始化和销毁
5.@import
@Configuration
@import({Colour.class, Red.class,MyimportSelector.class,MyimportBeanDefinitionRegistrar.class})
public class MainConfig {
}
public class MyimportSelector implements importSelector {
@Override
public String[] selectimports(Annotationmetadata importingClassmetadata) {
System.out.println(importingClassmetadata.getAnnotations());
System.out.println(importingClassmetadata.getAnnotations());
return new String[0];
}
}
public class MyimportBeanDefinitionRegistrar implements importBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(Annotationmetadata importingClassmetadata, BeanDefinitionRegistry registry) {
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(RainBow.class);
registry.registerBeanDefinition("rainBow",rootBeanDefinition);
}
}
6.@ConfigurationPropertie+@Component
@ConfigurationProperties:通常是用来将properties和yml配置文件属性转换为bean对象使用,有一个prefix属性:需要指定配置文件中某些属性的前缀,会自动匹配到bean对象的某些属性上面.结合@Component将转换后的bean对象放入Ioc容器中
@Component
@ConfigurationProperties(prefix = "nieyp.blog")
public class ConfigBean {
private String cource;
private String name;
set/get+tostring
}
application.yml:
nieyp.blog.cource:springBoot
nieyp.blog.name:blog
@RestController
public class TestController {
@Autowired
ConfigBean configBean;
@GetMapping("/getMessage")
public void getMessage() {
System.out.println(configBean.toString());
}
}
7.@EnableConfigurationProperties
@EnableConfigurationProperties在文档中解释 :当@EnableConfigurationProperties注解应用到你的@Configuration时,任何被@ConfigurationProperties注解的beans将自动被Environment属性配置 .这种风格的配置特别适合与SpringApplication的外部YAML配置进行配合使用。(@EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入.)
//将@ConfigurationProperties标注的类注册到BeafFactory
@EnableConfigurationProperties
@Configuration
public class PersonConfiguraiton {
}
8.@Value
public class Student {
@Value("123123")
private String name;
//@Value("#{20-3}")
@Value("123123")
private String age;
@Value("${person.nickName}")
private String nickName;
}
@PropertySource(value = {"classpath:/person.properties"})
@Configuration
public class MainConfigOfPropertyValue {
@Bean
public Student student(){
return new Student();
}
}
9.@Profile:指定组件在哪个环境的情况下才能被注册到容器中
- 加了环境标志的bean或者配置类,只有这个环境被激活的时候才能被注册到容器中,默认是default环境没有标注任何环境的Bean在任何环境下都是加载的
@Configuration
public class MainConfigOfProfile {
@Profile("test")
@Bean
public DataSource dataSourceTest(){
return new DataSource("test");
}
@Profile("dev")
@Bean
public DataSource dataSourceDev(){
return new DataSource("dev");
}
@Profile("pro")
@Bean
public DataSource dataSourcePro(){
return new DataSource("pro");
}
}
切换不同化境:
10.@ComponentScan:在Springboot项目中可以重新指定要扫描的包以及排除的某些1.使用命令行动态参数(VM arguments): -Dspring.profiles.active=xxxx
2.通过代码
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(); applicationContext.getEnvironment().setActiveProfiles("xxxx"); applicationContext.register(xxxx.class); applicationContext.refresh();
//@SpringBootApplication(exclude = {Controller.class, Service.class})
//@ComponentScan(basePackages = {"com.xx.xx.*"}, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {Controller.class}))
@SpringBootApplication
@ComponentScan(basePackages = {"com.hjj"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}



