Heim  >  Artikel  >  Wie erstelle ich Beans in .txt?

Wie erstelle ich Beans in .txt?

WBOY
WBOYnach vorne
2024-02-05 21:21:121075Durchsuche
Frageninhalt

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


Richtige Antwort


  1. Die erste Lösung. Sie können den gleichen Ansatz wie bei der .xml-Konfigurationsdatei verwenden, aber beandefinitionreader überschreiben. Sie erhalten die Konfigurationsdatei:
@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.

  1. Eine weitere einfache Lösung (funktioniert aber nur, wenn Sie einige Eigenschaften aus der Datei config.txt festlegen 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen