文章目录
一、组件的添加
1.1 @Configration
- 基本使用:
- FULL和LITE模式
- 配置类组件无依赖关系使用lite,减少判断,加速启动器启动速度
- 配置类组件有依赖关系(方法会调用得到之前的单例实现用)FULL
#############################Configuration使用示例######################################################
/**
* 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
* 2、配置类本身也是组件
* 3、proxyBeanMethods:代理bean的方法
* Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
* Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
* 组件依赖必须使用Full模式默认。其他默认是否Lite模式
*
*
*
*/
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
/**
* Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
* @return
*/
@Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
public User user01(){
User zhangsan = new User("zhangsan", 18);
//user组件依赖了Pet组件
zhangsan.setPet(tomcatPet());
return zhangsan;
}
@Bean("tom")
public Pet tomcatPet(){
return new Pet("tomcat");
}
}
默认为FULL模式,无论外部调用多少次GET,都会先去IOC容器当中找(单例)
1.2 添加组件常用注解
- @Bean
- @Repository
- @Service
- @Component
1.2 @Import
- 用于导入组件,传入类字节码即可,默认名称:全路径类名
* 4、@Import({User.class, DBHelper.class})
* 给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
*
*
*
*/
@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
}
1.3 @Conditional
- 当我们满足@Conditional定义的条件,才进行组件注入
可以作用于方法或者配置类上,当满足指定的条件,才回去装配组件。
二、原生配置文件引入
2.1 @ImportResources
@ImportResource("classpath:beans.xml")
public class MyConfig {}
三、配置绑定
- 传统使用Java读取Properties配置文件
public class getProperties {
public static void main(String[] args) throws FileNotFoundException, IOException {
Properties pps = new Properties();
pps.load(new FileInputStream("a.properties"));
Enumeration enum1 = pps.propertyNames();//得到配置文件的名字
while(enum1.hasMoreElements()) {
String strKey = (String) enum1.nextElement();
String strValue = pps.getProperty(strKey);
System.out.println(strKey + "=" + strValue);
//封装到JavaBean。
}
}
}
3.1 @ConfigurationProperties
- 可以让properties配置文件中数据与JavaBean进行绑定。
- 配置文件
mycar.brand=BMW
mycar.price=21
- 与JavaBean绑定
@Component
@ConfigurationProperties(prefix = "mycar")
public class MyCar {
private String brand;
private int price;
//GETERSETER
}
3.2 @EnableConfirationProperties
- 开启指定属性配置功能
- 把指定的类放入容器当中
这个注解在配置类当中,以上注解都是基于application.properties进行绑定的。