Bean的配置,注入,操作,校验

配置的规则

  • 尽量全都小写
  • 支持松散绑定(小写数字下划线)
  • @Value不支持松散绑定
    application.yml

注入的三种方式

同一个Bean只能有一个注入,多次注入会报错(Bean是单例的)

@Component注入

1,config类

@Component//加载配置属性必须先要受spring管控,先注入bean
@Data//加载配置属性必须要有set
@ConfigurationProperties(prefix = "aliyossphoto")
public class OSSphotoConfig {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}

2,启动类
可以直接 run.getBean(OSSphotoConfig.class)

@SpringBootApplication
public class BootAjaxtestApplication {
	public static void main(String[] args) {
		ConfigurableApplicationContext run = SpringApplication.run(BootAjaxtestApplication.class, args);

		OSSphotoConfig bean = run.getBean(OSSphotoConfig.class);
		System.out.println(bean);
		}

@Bean + @ConfigurationProperties

1,config类不能注入@Component

@Data//加载配置属性必须要有set
public class OSSphotoConfig {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}

2,启动类中需要@Bean注入,至于@ConfigurationProperties(prefix = “”)
写在哪都可以,只要在config类或者启动类中有绑定即可

@SpringBootApplication
public class BootAjaxtestApplication {

	@Bean
	@ConfigurationProperties(prefix = "aliyossphoto")
	public OSSphotoConfig getbean(){
		OSSphotoConfig osSphotoConfig = new OSSphotoConfig();
		return osSphotoConfig;
	}

public static void main(String[] args) {
	ConfigurableApplicationContext run = SpringApplication.run(BootAjaxtestApplication.class, args);

		OSSphotoConfig bean = run.getBean(OSSphotoConfig.class);
		System.out.println(bean);
		}

@EnableConfigurationProperties({class,class})

  • 这个注解可以清晰的看见到底注入了什么Bean,同时与@Component冲突,也与@Bean冲突;不过需要在config类中进行配置绑定
  • {}中利用反射,可以同时注入多个Bean

1,config类

@ConfigurationProperties(prefix = "aliyossphoto")
@Data//加载配置属性必须要有set
public class OSSphotoConfig {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}

2,启动类中

@EnableConfigurationProperties({OSSphotoConfig.class})
@SpringBootApplication
public class BootAjaxtestApplication {

public static void main(String[] args) {
	ConfigurableApplicationContext run = SpringApplication.run(BootAjaxtestApplication.class, args);

	OSSphotoConfig bean = run.getBean(OSSphotoConfig.class);
	System.out.println(bean);
		}}

Bean的操作

  • run.getBean(xxx.class)获得的对象由于@Data的存在可以调用get set方法
  • 获取属性值除了用get方法还可以用@Value("${xx.xx}")
  • 在主类,测试类,MVC层都可以直接@Autowired获取,但在普通类需要使用工具类

工具类实现ApplicationContextAware接口

  • 任意找一个包下创建一个工具类,这个工具类可以通过反射获取bean,不需要通过@Autowired或@Bean即可在普通类中使用bean

  • 并且这个工具类是通用的

  • 使用的时候直接SpringContext.getBean(xxx.class)获取bean即可

      @Component
      public class SpringContextUtil implements ApplicationContextAware {
      private static ApplicationContext applicationContext;
    
      @Override
      public void setApplicationContext(ApplicationContext context) throws 	BeansException {
          applicationContext = context;
      }
    
      //静态加载applicationContext
      public static ApplicationContext getApplicationContext() {
          return applicationContext;
      }
      //通过反射获取Bean
      public static <T> T getBean(Class<T> requiredType){
          return getApplicationContext().getBean(requiredType);
      }
      //通过id名获取bean
      public static <T> T getBean(String name){
          return (T) getApplicationContext().getBean(name);
      }
      }
    

@Value

单位的配置

@XxxxxUnit

属性校验validation+validator

1,maven坐标,二者缺一不可
1,1 JSR303规范

	<dependency>
		<groupId>javax.validation</groupId>
		<artifactId>validation-api</artifactId>
	</dependency>

1,2 Hibernate validator属性校验器

	<dependency>
		<groupId>org.hibernate.validator</groupId>
		<artifactId>hibernate-validator</artifactId>
	</dependency>

2,开启属性注入校验@Validated+@Max等

@ConfigurationProperties(prefix = "aliyossphoto")
@Data//加载配置属性必须要有set
@Validated
public class OSSphotoConfig {
  @Max(value = 200, message = "最大值不超过200")
  @Min(value = 0 , message = "最小值不能低于0")
  private Integer age;
}

校验规则有很多,有具体需要的时候搜一下就好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值