How it Works
- We have JSON file with Location and Name of Factory Class
- Using Configuration.java we read the JSON File and read the Configuration
- We run TasteFoodFromMenu.java by supplying the JSON file Location as Input
- Now by the above method the JAR’s could be built independently and by changing the JSON file we could make changes and deploy the code without restarting the Server
For more detail refer here
Configuration.java
import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import com.fasterxml.jackson.databind.ObjectMapper; public class Configuration { public static Configuration loadConfiguration(String fileName) throws IOException { //Read Name of File Path path = FileSystems.getDefault().getPath(fileName); //Read Contents of File String contents = new String(Files.readAllBytes(path), StandardCharsets.UTF_8); ObjectMapper mapper = new ObjectMapper(); //Map Location and FactoryType Configuration config = mapper.readValue(contents, Configuration.class); return config; } private String factoryType; private String location; public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public String getFactoryType() { return factoryType; } public void setFactoryType(String factoryType) { this.factoryType = factoryType; } }
TasteFoodFromMenu.java
public class TasteFoodFromMenu { public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException { Configuration configuration = Configuration.loadConfiguration(args[0]); String location = configuration.getLocation(); URL url = new URL(location); URLClassLoader ucl = new URLClassLoader(new URL[]{url}); Class<IFoodFactory> cls = (Class<IFoodFactory>) Class.forName(configuration.getFactoryType(), true, ucl); IFoodFactory cameraFactory = cls.newInstance(); IFood camera = cameraFactory.prepareFood(); camera.serveFood(); } }
config.json
{ "factoryType": "com.mugil.food.ChineseFoodFactory", "location": "file:///D:/java/ReadConfFromJSON/lib/FoodMenu.jar" }