注解好强大,这里把遇到的注解逐步更新上来,做个记录。
@Import
手动导入一个没有注解的类
定义一个类
public class dog {
}
@SpringBootApplication
@Import({dog.class})
public class DemoApplication extends SpringBootServletInitializer {
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DemoApplication.class);
}
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
System.out.println(context.getBean(dog.class));
System.out.println(context.getBean(dog.class));
}
输出如下:
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
exclude为排查数据库,排除默认的数据库自动加载
@Bean
Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理
示例:写一个dog类,在写一个cat类
@Component
public class dog {
@Bean
public cat getCat()
{
cat ct = new cat();
System.out.println(ct);
return ct;
}
}
public class cat {
}
public static void main(String[] args) {
ConfigurableApplicationContext context =SpringApplication.run(SecondApplication.class, args);
System.out.println(context.getBean(dog.class));
System.out.println(context.getBean(cat.class));
}
可以看到,
果然这个类交给了spring管理,两个类是一样的。
另外,@Bean 注释的函数,还可以传递参数,但是传递的参数的类型,必须也要有@Bean注释过。
感觉spring的逻辑是这样的,先找类型,再找参数名字一样的,如果找不到,就按照类型来。
看下面的例子
@Component
public class dog {
@Bean
public pick firstpick()
{
return new pick(1);
}
@Bean pick secondpick()
{
return new pick(2);
}
@Bean
public cat getCat(pick firstpick ,pick secondpick)
{
System.out.println("firstpick = "+firstpick.m_i);
System.out.println("secondpick ="+secondpick.m_i);
cat ct = new cat();
System.out.println(ct);
return ct;
}
}
看输出:
@ConfigurationProperties
添加yml的配置,再这里添加
好坑,@ConfigurationProperties(prefix = "myyml") 这里的myyml只能写小写。
而不是文件里面的大写,查了我好几个小时
这里还有一个注意事项:
就是默认会去读取application.yml 但是我们还可以让其去读取application-dev.yml的配置文件。增加下面配置即可。
spring:
# 环境 dev|test|prod
profiles:
active: dev
@Value
可以用来获取配置文件的值
举个列子
@Value("${web.upload-files}")
private String uploadFilePath;
配置文件这么写:
打印这个值 ,结果OK。