Heim > Java > Hauptteil

Wie erstelle ich Beans in .txt?

WBOY
Freigeben: 2024-02-05 21:21:12
nach vorne
1094 Leute haben es durchsucht
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;
Nach dem Login kopieren

}

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();
    }
}
Nach dem Login kopieren

@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);
}
Nach dem Login kopieren

}

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

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

Configuration.txt:

person1=com.example.mybean
person2=com.example.mybean
Nach dem Login kopieren

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

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());
    }
}
Nach dem Login kopieren

Sie erhalten die Ausgabe in der Befehlszeile:

test com.example.mybean@3343997b com.example.mynormalservice@5c1dc4e9
Nach dem Login kopieren

Bitte beachten Sie, dass Sie config.txt im Ressourcenordner ablegen müssen.

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

    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!

    Quelle:stackoverflow.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