您现在的位置是:首页 >其他 >springboot3深度学习(在更)网站首页其他

springboot3深度学习(在更)

秃狼 2024-08-18 12:01:02
简介springboot3深度学习(在更)

jar包外进行配置文件的修改

在jar包的同目录创建application.properties文件,直接在这个文件中配置对应的信息,就可以完成对应的修改,我们就可以做到不修改源代码。

例子:

 测试结果为下:

yml文件和properties文件都可以实现此功能,但必须保证这个配置文件的名字为application,才能生效。 

条件注释

通过对应的条件判断完成对Bean的配置。

例子测试:

        配置类

import com.huang.pojo.Cat;
import com.huang.pojo.Dog;
import com.huang.pojo.People;
import com.huang.pojo.User;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
import org.springframework.context.annotation.Bean;

@SpringBootConfiguration
public class SpringbootConfig {
    //条件注解测试
    @Bean
    public User getUser() {
        return new User("tolen", 22);
    }

    @ConditionalOnClass(value = com.huang.pojo.User.class)
    @Bean
    public Dog getDog() {
        return new Dog("haha", 1);
    }

    //此时是不会执行下面的方法
    @ConditionalOnMissingClass(value = "com.huang.pojo.Dog")
    @Bean
    public Cat getCat() {
        return new Cat("mimi", 2);
    }
    //因为在ioc容器中存在User,所以会执行
    @ConditionalOnBean(value = User.class)
    @Bean
    public Cat getCat2() {
        return new Cat("mimi", 2);
    }
    //因为在ioc容器中存在Cat,所以不会执行
    @ConditionalOnMissingBean(value = Cat.class)
    @Bean
    public People getPeople() {
        return new People("秃狼", 22);
    }
}

         启动类

import com.huang.pojo.Cat;
import com.huang.pojo.Dog;
import com.huang.pojo.People;
import com.huang.pojo.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication(scanBasePackages = "com.huang")
public class Springboot3StudyApplication {

    public static void main(String[] args) {
        //返回spring的ioc容器
        var ioc = SpringApplication.run(Springboot3StudyApplication.class, args);
        var cat = ioc.getBeanNamesForType(Cat.class);
        if(cat != null) {
            System.out.println("cat被创建");
            System.out.println(cat[0]);
        };
        var dog = ioc.getBeanNamesForType(Dog.class);
        if(dog != null) {
            System.out.println("dog被创建");
            System.out.println(dog[0]);
        };
        var people = ioc.getBeanNamesForType(People.class);
        if(people != null) {
            System.out.println("people被创建");
            System.out.println(people[0]);
        };
        var user = ioc.getBeanNamesForType(User.class);
        if(user != null) {
            System.out.println("user被创建");
            System.out.println(user[0]);
//            这里报错说数组的索引越界了,说明没有查到people,也就说明ioc容器中没有people的Bean
        };
    }

}

测试结果为下

这里报错说数组的索引越界了,说明没有查到people,也就说明ioc容器中没有people的Bean。

属性绑定注解

@ConfigurationProperties("前缀"): 声明组件的属性和配置文件哪些前缀开始项进行绑定。(配合@Compoment或@Bean使用)

@EnableConfigurationProperties:快速注册注解。(主要使用在外部引入的类上,因为外部类通常是没有注解扫描的,其上的注解是失效的,所以使用@EnableConfigurationProperties,使其类上的注解@ConfigurationProperties生效,这时就会和我们设置的配置文件中的信息绑定了。这个注解会自动将引入的文件配置到ioc容器中,无需添加@Bean

例子

实体类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties("cat")
public class Cat {
    private String name;
    private Integer age;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties("dog")
public class Dog {
    private String name;
    private Integer age;
}

配置类

import com.huang.pojo.Cat;
import com.huang.pojo.Dog;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

@SpringBootConfiguration
@EnableConfigurationProperties({Dog.class})
public class SpringbootConfig {
   @Bean
    public Cat getCat() {
        return new Cat();
    }
}

application.yml

cat:
  name: mimi
  age: 12
dog:
  name: wangwang
  age: 23

 测试类

import com.huang.pojo.Cat;
import com.huang.pojo.Dog;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Springboot3StudyApplicationTests {

    @Autowired
    Cat cat;
    @Autowired
    Dog dog;

    @Test
    void test1() {
        System.out.println(cat);
        System.out.println(dog);
    }

}

测试结果为下:

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。