Heim > Java > javaLernprogramm > Wie die zugrunde liegende SpringBoot2-Annotation @ConfigurationProperties die Bindung konfiguriert

Wie die zugrunde liegende SpringBoot2-Annotation @ConfigurationProperties die Bindung konfiguriert

WBOY
Freigeben: 2023-05-12 08:22:05
nach vorne
1033 Leute haben es durchsucht

Normalerweise fügen wir einige Dinge, die sich häufig ändern, in die Konfigurationsdatei ein.

Zum Beispiel die Portnummer server.port=8080, die zuvor in die Konfigurationsdatei application.properties geschrieben wurde, und andere häufig verwendete Portnummern umfassen Datenbankverbindungsinformationen usw. application.properties里的端口号server.port=8080,另外常见的还有数据库的连接信息等等。

那么,我的数据库连接信息放在配置文件里,我要使用的话肯定得去解析配置文件,解析出的内容在 bean 里面去使用。

整个场景其实就是把配置文件里的所有配置,绑定到 java bean 里面

要完成这个场景,基于 java 原生代码编写还是有点麻烦的。通常会做一个封装,读取到properties文件中的内容,并且把它封装到JavaBean中:

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             ... ...         }     }
Nach dem Login kopieren

这里就是使用Properties类来加载配置文件a.properties,然后遍历配置文件中的每一个k-v,获取之后就可以用到对应的地方。

在 springboot 中简化了这个过程,这就是配置绑定。

配置绑定

通过使用注解@ConfigurationProperties来完成配置绑定,注意需要结合@Component使用。

新建一个组件Car,有2个属性分别是品牌和价格:

@Componentpublic class Car {    private String brand;    private Integer price;// get set tostring 就不贴了
Nach dem Login kopieren

在配置文件application.properties,设置一些属性值,比如:

mycar.brand=QQmycar.price=9999
Nach dem Login kopieren

使用@ConfigurationProperties注解,加到组件上:

@Component@ConfigurationProperties(prefix = "mycar")public class Car {    private String brand;    private Integer price;... ...
Nach dem Login kopieren

传进去的 prefix 是配置文件里的前缀,这里就是 mycar。

验证

现在来测试一下是否绑定成功,在之前的HelloController继续增加一个控制器方法:

@RestControllerpublic class HelloController {    @Autowired    Car car;    @RequestMapping("/car")    public Car car() {        return car;    }    @RequestMapping("/hello")    public String Hello() {        return "Hello SpringBoot2 你好";    }}
Nach dem Login kopieren

部署一下应用,浏览器访问http://localhost:8080/car:

Wie die zugrunde liegende SpringBoot2-Annotation @ConfigurationProperties die Bindung konfiguriert

绑定成功。

另一种方式

除上述方法之外,还可以使用@EnableConfigurationProperties + @ConfigurationProperties的方式来完成绑定。

注意,@EnableConfigurationProperties注解要使用在配置类上,表示开启属性配置的功能:

//@ConditionalOnBean(name = "pet1")@Import({User.class, DBHelper.class})@Configuration(proxyBeanMethods = true)@ImportResource("classpath:beans.xml")  //配置文件的类路径@EnableConfigurationProperties(Car.class) //开启属性配置的功能public class MyConfig {    @Bean("user1")    public User user01(){        User pingguo = new User("pingguo",20);        pingguo.setPet(tomcatPet());        return pingguo;    }    @Bean("pet22")    public Pet tomcatPet(){        return new Pet("tomcat");    }}
Nach dem Login kopieren

@EnableConfigurationProperties(Car.class)传入要开启配置的类,这可以自动的把 Car 注册到容器中,也就是说之前 Car 上的@Component就不需要了。

//@Component@ConfigurationProperties(prefix = "mycar")public class Car {    private String brand;    private Integer price;
Nach dem Login kopieren

重新部署访问下地址,依然可以。

Wie die zugrunde liegende SpringBoot2-Annotation @ConfigurationProperties die Bindung konfiguriert

关于第二种的使用场景,比如这里的 Car 是一个第三方包里的类,但是人家源码没有加@Component注解,这时候就可以用这种方式进行绑定。

最后,要记住当使用@ConfigurationProperties(prefix = "mycar")这个配置绑定时,是跟 springboot 核心配置文件 application.properties

Meine Datenbankverbindungsinformationen werden also in der Konfigurationsdatei abgelegt. Wenn ich sie verwenden möchte, muss ich die Konfigurationsdatei analysieren und den analysierten Inhalt in der Bean verwenden. 🎜🎜Das gesamte Szenario besteht eigentlich darin, alle Konfigurationen in der Konfigurationsdatei an die Java-Bean zu binden. 🎜🎜Um dieses Szenario abzuschließen, ist es immer noch etwas mühsam, basierend auf Java-nativem Code zu schreiben. Normalerweise wird eine Kapselung durchgeführt, der Inhalt in der Eigenschaftendatei wird gelesen und in ein JavaBean gekapselt: 🎜rrreee🎜Hier wird die Klasse Properties verwendet, um die Konfigurationsdatei a.properties zu laden code> und durchlaufen Sie dann jedes <code>k-v in der Konfigurationsdatei. Nachdem Sie es erhalten haben, können Sie die entsprechende Stelle verwenden. 🎜🎜Dieser Vorgang wird in Springboot vereinfacht, bei dem es sich um eine Konfigurationsbindung handelt. 🎜

Konfigurationsbindung

🎜Die Konfigurationsbindung wird durch die Verwendung der Annotation @ConfigurationProperties vervollständigt. Beachten Sie, dass sie in Verbindung mit @Component verwendet werden muss. 🎜🎜Erstellen Sie eine neue Komponente Auto mit zwei Attributen: Marke und Preis: 🎜rrreee🎜In der Konfigurationsdatei application.properties legen Sie einige Attributwerte fest, wie zum Beispiel: 🎜rrreee 🎜Verwenden Sie die Annotation @ConfigurationProperties und fügen Sie sie der Komponente hinzu: 🎜rrreee🎜Das übergebene Präfix ist das Präfix in der Konfigurationsdatei, hier ist es mycar. 🎜

Überprüfung

🎜Jetzt testen wir, ob die Bindung erfolgreich ist. Fügen Sie eine Controller-Methode zum vorherigen HelloController hinzu: 🎜rrreee🎜Stellen Sie die Anwendung bereit und greifen Sie auf den Browser http zu. //localhost:8080/car:🎜🎜SpringBoot2 untere Ebene Kommentieren @ConfigurationProperties, wie man die Bindung konfiguriert🎜🎜Bindung erfolgreich. 🎜

Anderer Weg

🎜Zusätzlich zu den oben genannten Methoden können Sie auch @EnableConfigurationProperties + @ConfigurationProperties verwenden, um die Bindung abzuschließen. 🎜🎜Beachten Sie, dass die Annotation @EnableConfigurationProperties für die Konfigurationsklasse verwendet werden sollte, um die Funktion zum Aktivieren der Eigenschaftskonfiguration anzugeben: 🎜rrreee🎜@EnableConfigurationProperties(Car.class) Übergeben Durch die Konfiguration der zu aktivierenden Klasse kann das Auto automatisch im Container registriert werden, was bedeutet, dass die @Component auf dem Auto zuvor nicht mehr benötigt wird. 🎜rrreee🎜Erneut bereitstellen und auf die nächste Adresse zugreifen, es funktioniert immer noch. 🎜🎜SpringBoot2 zugrunde liegende Annotation @ConfigurationProperties, wie man die Bindung konfiguriert🎜🎜Über Kapitel Es gibt zwei Verwendungsszenarien. Das Auto ist hier beispielsweise eine Klasse in einem Drittanbieterpaket, aber der Quellcode verfügt nicht über die Annotation @Component. In diesem Fall können Sie es einbinden Hier entlang. 🎜🎜Denken Sie abschließend daran, dass bei Verwendung von @ConfigurationProperties(prefix = "mycar") diese Konfiguration an den Inhalt der Springboot-Kernkonfigurationsdatei gebunden ist application.properties Die Bindungsbeziehung gegründet. 🎜

Das obige ist der detaillierte Inhalt vonWie die zugrunde liegende SpringBoot2-Annotation @ConfigurationProperties die Bindung konfiguriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage