Hintergrund
Eine der bequemeren Funktionen bei der Verwendung von Springboot ist die Variableninjektion. Mithilfe der @value-Annotation können Sie einfach Variablen aus der Konfigurationsdatei in den Code einfügen.
Während des Verwendungsprozesses wurde jedoch ein Problem entdeckt. @value unterstützt statische Variablen nicht sehr gut, daher wurde in diesem Artikel untersucht, wie statische Variablen eingefügt werden.
Beginnen Sie mit der Lösung von Problemen
1. Einfaches Beispiel für die Injektion einer statischen Variablen @value
(1) Klasse A (statische Variablen definieren, um Attributwerte einzufügen)
In dieser Klasse fügen wir den Wert der Eigenschaft „jdbc.url“ in die statische Variable „url“ ein, die in der MyComponent-Klasse definiert ist. Das geht ganz einfach
Beachten Sie, dass die setUrl-Methode nicht statisch sein kann
@Component
public class MyComponent {
public static String url;
@Value("${jdbc.url}")
private void setUrl(String url) {
MyComponent.url = url;
}
}
2. Was passiert, wenn die Variable von anderen Klassen im statischen Codeblock referenziert werden muss?
(2) Klasse B (verweisen Sie auf den Codeblock der Klasse A über einen statischen Block)
In dieser Klasse verwenden wir einen statischen Block, um auf die statische Variable „URL“ der Klasse A zu verweisen.
@Component
public class AnotherComponent {
static {
// 静态块内访问A类的静态变量
System.out.println(MyComponent.url);
}
}
(3) Stellen Sie die Reihenfolge der Instanziierung der Klassen A und B sicher
SpringBoot-Startklasse (fügen Sie eine Instanz von Klasse A ein und stellen Sie sicher, dass Klasse A vor Klasse B initialisiert wird):
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private MyComponent myComponent;
@Autowired
private AnotherComponent anotherComponent;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... args) throws Exception {
// 这里可以访问MyComponent的实例和AnotherComponent的静态代码块
}
}