1. Hintergrund
Kürzlich habe ich während des Projektentwicklungsprozesses auf das Problem gestoßen, dass ich einige benutzerdefinierte Variablen in der Eigenschaftendatei für dynamisches Lesen und Ändern der Variablen von Java -Programmen definieren musste, und benötigt nicht mehr, um den Code zu ändern. Ich nutzte diese Gelegenheit, um den Inhalt der Immobiliendatei im integrierten Entwicklungsprojekt von Spring+SpringMVC+MyBatis über Java -Programme zu sortieren und zu analysieren und sie zuerst mit Ihnen zu teilen.
2. Einführung der Projektumgebung
Drei oder fünf Möglichkeiten, es umzusetzen
Methode 1. Laden Sie den Inhalt in der Konfigurationsdatei jdbc.properties über den Kontext: Eigenschaft
<Kontext: Property-Placeholder-Standort = "ClassPath: jdbc.properties" ignorieren-nicht-lolvable = "true"/>
Die obige Konfiguration entspricht der folgenden Konfiguration. Dies ist eine Vereinfachung der folgenden Konfiguration
<bean id = "PropertyConFigurer"> <Eigenschaft name = "IgnoreUnResolvable Placeholder" value = "true"/> <Eigenschaft name = "Positionen"> <liste> <wert> classPath: jdbc.properties </value> </list> </property> </bean> </bean> </bean>
Hinweis: Wenn Sie in der Datei fRING-MVC.XML die folgende Konfiguration haben, dürfen Sie den folgenden roten Teil nicht über seine Funktion und das Prinzip fehlen.
<!-Konfigurieren von Komponenten-Scannen, werden nur Controller-Annotationen in SpringMVC-Container gescannt-> <Kontext: Komponenten-scan-Basis-Package = "com.Hafiz.www" Gebrauchsdefault-filters = "false"> <context: include-filter type
Methode 2. Injektion mit Anmerkungen, die hauptsächlich den entsprechenden Wert in der Eigenschaftendatei mit Anmerkungen im Java -Code injizieren.
<bean id = "prop"> <!- Dies ist die Eigenschaftenfaktorikklasse. Es verfügt auch über eine Standorte Eigenschaft, die ebenso wie die oben genannten-> <Eigenschaft name = "Standorte"> <array> <wert> classPath: jdbc.properties </value> </array> </property> </bean> empfängt
Methode 3. Verwenden Sie das TAG von Util: Eigenschaften, um die Inhalte in der Eigenschaftendatei freizulegen
<util: properties id = "propertiesreader" location = "classPath: jdbc.properties"/>
HINWEIS: Verwenden der oben genannten Zeilenkonfiguration müssen Sie den folgenden roten Teil im Header der feder-dao.xml-Datei deklarieren
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-sinstance xmlns: util = "http://www.springframework.org/schema/util" xsi: schemalocation = "http://www.spingframework.org/schema/beans http://www.springframework.org/schema/beans/ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.spingframework.org/sschema/util http://www.springframework.org/schema/util/spring-util.xsd ">
Methode 4. Setzen Sie Eigenschaften den Eigenschaften der benutzerdefinierten Unterklasse zur Verwendung im Programm beim Laden des Kontextes über PropertyPlaceHolemeConFigurer aus
<bean id = "PropertyConfiger"> <Eigenschaft name = "IgnoreUnResolvable Placeholder" Value = "true"/> <Eigenschaft name = "ignoreresourcenotfound" value = "true"/> <Eigenschaftsname = "Positionen"> <list> <Valchen> classpath: jdbc.properties </value> </list> </list> </list> </list> </list> </</list> </</list> </</</</</bean> </</bean> </</uBan> </</bean> </</bean> </</lean>
Die Erklärung der Custom Class PropertyConfiger ist wie folgt:
Paket com.hafiz.www.util; import org.springframework.beans.beansexception; import org.springframework Java.util.Properties;/*** Desc: Properties -Konfigurationsdatei -Lesungsklasse* Erstellt von Hafiz.zhang am 2016/9/14. */Public Class PropertyConfiger erweitert PropertyPlaPleholderConFigurer {private Properties -Requisiten; // Zugriff auf die Eigenschaften Konfigurationsdateischlüsselwert Ergebnis @Override Protected void ProcessProperties (configurableListableBeanFactory beanfactorytoprocess, Eigenschaften Props) löscht Beansexception {Super.Processproperties (BeanfactoryToProzess, Props); this.Props = Requisiten; } public String getProperty (String -Schlüssel) {return this.props.getProperty (Key); } public String getProperty (String -Schlüssel, String defaultValue) {return this.props.getProperty (Schlüssel, StandardValue); } public Object setProperty (String -Schlüssel, Stringwert) {return this.props.setProperty (Schlüssel, Wert); }}Verwenden Sie
Methode 5. Passen Sie die Werkzeugklasse -Eigenschaft an und lesen Sie den Inhalt der Eigenschaftendatei im statischen statischen Codeblock der Klasse und speichern Sie sie in der statischen Eigenschaft für die Verwendung durch andere Programme.
Paket com.hafiz.www.util; import org.slf4j.logger; import org.slf4j.loggerfactory; import Java.io. */public class PropertyUtil {private static Final Logger logger = loggerFactory.getLogger (PropertyUtil.Class); private statische Eigenschaften Requisiten; static {loadProps (); } synchronisierte statische private void loadProps () {logger.info ("Ladeeigenschaften Dateiinhalte starten ......"); props = neue Eigenschaften (); InputStream in = null; Versuchen Sie {<!-Erster Typ, erhalten Sie einen Eigenschaftendateistrom über den Klassenloader-> in = propertyutil.class.getClassloader (). getResourceAsStream ("jdbc.properties"); <!-Zweiter Typ, erhalten Sie einen Eigenschaftendateistrom über die Klasse-> // in = propertyutil.class.getResourceAsStream ("/jdbc.properties"); props.load (in); } catch (FilenotFoundException e) {logger.Error ("jdbc.properties Datei nicht gefunden"); } catch (ioException e) {logger.Error ("ioException erscheint"); } endlich {try {if (null! = in) {in.close (); }} catch (ioException e) {logger.Error ("Ausnahme mit jdbc.properties Dateistrom geschlossen"); }} logger.info ("Laden des Inhalts der Eigenschaftendatei ........."); logger.info ("Eigenschaftendateiinhalt:" + Requisiten); } public static String getProperty (String -Schlüssel) {if (null == props) {loadProps (); } return props.getProperty (Schlüssel); } public static String getProperty (String -Schlüssel, String defaultValue) {if (null == props) {loadProps (); } return props.getProperty (Schlüssel, defaultValue); }}Hinweis: Wenn die Klasse geladen wird, wird der Inhalt der Konfigurationsdatei automatisch im angegebenen Ort gelesen und auf statische Eigenschaften speichern, die effizient und bequem sind und gleichzeitig geladen und mehrmals verwendet werden können.
4. Vorsichtsmaßnahmen und Vorschläge
Die ersten drei Methoden sind in den oben genannten fünf Methoden starr. Und wenn Sie sie in einer Bean mit @Controller-Annotation verwenden möchten, müssen Sie sie in Spring-MVC.xml von SpringMVC deklarieren. Wenn Sie sie in einer Bean mit @Service, @Respository usw. verwenden möchten, müssen Sie sie in der Konfigurationsdatei von Spring in Spring deklarieren.
Ich persönlich empfehle die vierten und fünften Konfigurationsmethoden. Der fünfte ist das Beste. Es muss nicht einmal in das Tool-ähnliche Objekt injiziert werden, und es wird direkt die statische Methode für den Erwerb aufgerufen und lädt es nur einmal, was ebenfalls hocheffizient ist. Darüber hinaus sind die ersten drei Methoden nicht sehr flexibel, und der Schlüsselwert von @Value ist erforderlich.
5. Test um zu überprüfen, ob es verfügbar ist
1. Erstellen wir zuerst PropertieService
Paket com.hafiz.www.service;/** * Desc: Java -Programm erhält den Dienst des Inhalts der von Hafiz.zhang erstellten Inhalt der Properties -Datei * am 2016/9/16. */public interface PropertieService {/** * Die erste Implementierungsmethode erhält den Wert des angegebenen Schlüssels in der Eigenschaftendatei * * @return */String GetProperyFirstway (); / ** * Die zweite Implementierungsmethode erhält den Wert des angegebenen Schlüssels in der Eigenschaftendatei * * @return */ String GetProperyBySecondway (); / ** * Die dritte Implementierungsmethode erhält den Wert des angegebenen Schlüssels in der Eigenschaftendatei * * @return */ String GetProperyByTHirdway (); / ** * Die vierte Implementierungsmethode erhält den Wert des angegebenen Schlüssels in der Eigenschaftendatei * * @param Key * * @return */ String GetProperyFourthway (String -Schlüssel); / ** * Die vierte Implementierungsmethode erhält den Wert des angegebenen Schlüssels in der Eigenschaftendatei * * @param Key * * @param DefaultValue * * @return */ String GetProperyFourthay (String -Schlüssel, String DefaultValue); / ** * Die fünfte Implementierungsmethode erhält den Wert des angegebenen Schlüssels in der Eigenschaftendatei * * @param Key * * @return */ String GetProperyFifthway (String -Taste); / ** * Die fünfte Implementierungsmethode, um den Wert des angegebenen Schlüssels in der Eigenschaftendatei zu erhalten2. Erstellen und implementieren Sie die Klasse propertieServiceImpl und implementieren Sie
Paket com.hafiz.www.service.impl; import com.hafiz.www.service.propertieService; Import com.hafiz.www.util.propertyconfigurer; org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype */ @ServicePublic class PropertieServiceImpl implementiert PropertieService {@Value ("$ {test}") private String testDatabyFirst; @Value ("#{prop.test}") private String testDatabySecond; @Value ("#{PropertiesReader [Test]}") private String testDatabyTHird; @Autowired Private PropertyConfigurer PC; @Override public String GetProperyFirstway () {return testDatabyFirst; } @Override public String getProperyBySecondway () {return testDatabySecond; } @Override public String getProperyByThirdway () {return testDatabythird; } @Override public String getProperyFourthway (String -Schlüssel) {return pc.getProperty (Key); } @Override public String getProperyFourthway (String -Schlüssel, String defaultValue) {return pc.getProperty (Schlüssel, DefaultValue); } @Override public String getProperyFifthway (String -Schlüssel) {return PropertyUtil.getPropery (Key); } @Override public String getProperyByFThway (String -Schlüssel, String defaultValue) {return PropertyUtil.getProperty (Schlüssel, defaultValue); }}3. Controller Class PropertyController
Paket com.hafiz.www.controller; import com.hafiz.www.service.propertieService; import com.hafiz.ww.util.propertyutil; org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.requestmapping; Desc: Properties Test Controller* Erstellt von Hafiz.zhang am Jahr 2016/9/16. */@Controller@RequestMapping ("/prop") öffentliche Klasse PropertyController {@autowired Private PropertieService PS; @RequestMapping (value = "/way/first", method = requestMethod.get) @RespondeBody public String getPropertyBirstway () {return ps.getProperyFirstway (); } @RequestMapping (value = "/way/second", method = requestMethod.get) @ResponseBody public String getPropertyBySecondway () {return ps.getProperyBySecondway (); } @RequestMapping (value = "/way/dritte", method = requestMethod.get) @ResponseBody public String getPropertyByThirdway () {return ps.getProperyByThirdway (); } @RequestMapping (value = "/way/viertel/{key}", method = requestMethod.get) @ResponseBody public String getPropertyFourthway (@patheVariable ("Key") String -Schlüssel {return ps.getProperyFourthway (Taste "DefaultValue"); } @RequestMapping (value = "/way/fifth/{key}", method = requestMethod.get) @ResponseBody public String getPropertyFifthway (@PathVariable ("Key") String Key {return PropertyUtil.getProperty (Key, "DefaultValue"); }}4.Jdbc.properties Datei
jdbc.driver = com.mysql.jdbc.driverjdbc.url = jdbc: mysql: //192.168.1.196: 3306/dev? useUnicode = true & charakteristischesCoding = utf-8jdbc.username = rootjdbc.password = 123456jdbc.maxa ctive = 200Jdbc.minidle = 5jdbc.initialSize = 1Jdbc.maxWait = 60000Jdbc.TimeBetweenevictionRunsmillis = 60000JDBC.MineVictableIdletImemillis = 300000Jdbc.ValidationQuery = Aus T_USERJDBC.TETELIDEIDLE = truejdbc.testonReturn = falsejdbc.poolpreparedStatements = truejdbc.maxpoolpreparedStatementPerctionSize = 20JDBC.Filters = Stat#Test DataTest = com.Hafiz.www
5. Projektergebnisdiagramm
6. Projekt Download: Demo http://xiazai.vevb.com/201612/yuanma/propertiesconfigurer_jb51.zip
7. Testergebnisse
Die erste Methode
Der zweite Weg
Der dritte Weg
Die vierte Methode
Die fünfte Methode
6. Zusammenfassung
Durch diese Überprüfung und Prüfung verstehen wir die Rolle und das Prinzip der Beziehung zwischen Spring und SpringMVC und dem Attribut "Gebrauchsdefault-Filter", das beim Scannen des Kontextes: Komponenten-Scan-Tag-Paket am einfachsten übersehen wird. In der Lage sein, die Probleme, die auftreten, besser zu lokalisieren und schnell zu lösen. Wie auch immer, großartig ~~~
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.