Ich habe eine Aufgabe. Ich muss eine benutzerdefinierte Bean-Definition definieren. Definieren Sie beispielsweise meine Beans in einer TXT-Datei und rufen Sie sie dann über den Anwendungskontext im Spring Boot ab. Ich weiß nicht, was ich tun soll. Vielleicht kann mir jemand helfen?
Ich habe eine Klasse erstellt: @Element Mensch der öffentlichen Klasse {
private string name; private int age;
}
Beans.txt erstellt
personbean1=com.example.person personbean2=com.example.person
@config Die öffentliche Klasse „custombeanconfig“ implementiert den Beandefinitionregistrypostprocessor {
@override public void postprocessbeandefinitionregistry(beandefinitionregistry registry) { try { inputstream inputstream = getclass().getclassloader().getresourceasstream("beans.txt"); bufferedreader reader = new bufferedreader(new inputstreamreader(inputstream)); string line; while ((line = reader.readline()) != null) { string[] parts = line.split("="); if (parts.length == 2) { string beanname = parts[0].trim(); string classname = parts[1].trim(); registerbean(registry, beanname, classname); } } } catch (ioexception e) { e.printstacktrace(); } } private void registerbean(beandefinitionregistry registry, string beanname, string classname) { try { class<?> beanclass = class.forname(classname); genericbeandefinition beandefinition = new genericbeandefinition(); beandefinition.setbeanclass(beanclass); registry.registerbeandefinition(beanname, beandefinition); } catch (classnotfoundexception e) { e.printstacktrace(); } }
@springbootapplication Bewerbung für eine öffentliche Buchhandlung {
public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(BookShopApplication.class, args); Person person1 = context.getBean("personBean1", Person.class); Person person2 = context.getBean("personBean2", Person.class); System.out.println(person2); System.out.println(person1); }
}
und habe diesen Fehler erhalten: Keine Bean mit dem Namen „personbean1“ verfügbar
@configuration @importresource(value = "classpath:config.txt", reader = mycustombeandefinitionreader.class) public class myconfiguration { }
und benutzerdefinierter Beandefinitionreader:
public class mycustombeandefinitionreader extends abstractbeandefinitionreader { public mycustombeandefinitionreader(beandefinitionregistry registry) { super(registry); } @override public int loadbeandefinitions(final resource resource) throws beandefinitionstoreexception { try { //take all you need from config.txt here string[] config = readconfig(resource.getfile()); // will return [person1='com.example.mybean', 'person2=com.example.mybean'] beandefinitionregistry registry = getregistry(); for (int i = 0; i < config.length; i++) { //get name and class string[] split = config[i].split("="); string beanname = split[0]; string beanclass = split[1]; //register bean definition genericbeandefinition beandefinition = new genericbeandefinition(); beandefinition.setbeanclassname(beanclass); registry.registerbeandefinition(beanname, beandefinition); } return config.length; // amount of registered beans } catch (exception e) { throw new beandefinitionstoreexception("error while loading beans", e); } } public static string[] readconfig(file file) throws ioexception { try (bufferedreader reader = new bufferedreader(new filereader(file))) { string line1 = reader.readline(); string line2 = reader.readline(); return new string[]{line1, line2}; } } }
Configuration.txt:
person1=com.example.mybean person2=com.example.mybean
Das ist es. Sie erhalten Person1 und Person2.
Wenn Sie Kurse haben:
public class mybean { @autowired private mynormalservice mynormalservice; public mynormalservice getmynormalservice() { return mynormalservice; } public void setmynormalservice(mynormalservice mynormalservice) { this.mynormalservice = mynormalservice; } }
Sie können testen, ob Spring Ihre Beans in den Dienst einfügt und alle Abhängigkeiten innerhalb von mybean ebenfalls von Spring verwaltet werden.
@service public class myservice { @autowired private mybean person1; @postconstruct public void test() { system.out.println("test " + person1 + " " + person1.getmynormalservice()); } }
Sie erhalten die Ausgabe in der Befehlszeile:
test com.example.mybean@3343997b com.example.mynormalservice@5c1dc4e9
Bitte beachten Sie, dass Sie config.txt im Ressourcenordner ablegen müssen.
@Configuration public class MyConfiguration { @Bean public MyCustomBean myCustomBean() { String[] config = readConfig("path/to/your/config.txt"); return new MyCustomBean(config[0], config[1]); } public static String[] readConfig(String filePath) throws IOException { try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line1 = reader.readLine(); String line2 = reader.readLine(); return new String[]{line1, line2}; } } }
Das obige ist der detaillierte Inhalt vonWie erstelle ich Beans in .txt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!