В зависимости от ваших конкретных требований, в некоторых случаях механизм загрузки Java службы может достичь того, что вы после.
. Короче говоря, он позволяет разработчикам явно объявлять, что класс подклассы другого класса (или реализует некоторый интерфейс), перечислив его в файле в каталоге META-INF/services
файла JAR / WAR. Затем он может быть обнаружен с использованием класса java.util.ServiceLoader
, который при заданном объекте Class
будет генерировать экземпляры всех объявленных подклассов этого класса (или, если Class
представляет собой интерфейс , все классы, реализующие этот интерфейс).
Основное преимущество этого подхода состоит в том, что нет необходимости вручную сканировать весь путь к классам для подклассов - вся логика обнаружения содержится в классе ServiceLoader
и он загружает классы, явно объявленные в каталоге META-INF/services
(не каждый класс в пути к классам).
Однако есть некоторые недостатки:
META-INF/services
. Это дополнительное бремя для разработчика и может быть подвержено ошибкам. ServiceLoader.iterator()
генерирует экземпляры подкласса, а не их Class
объектов. Это вызывает две проблемы: вы не можете сказать, как строятся подклассы - конструктор no-arg используется для создания экземпляров. Таким образом, подклассы должны иметь конструктор по умолчанию или должны быть объяснены конструктором no-arg. Очевидно, что Java 9 будет решать некоторые из этих недостатков (в частности, те, которые касаются создания подклассов).
Предположим, вам интересно найти классы, реализующие интерфейс com.example.Example
:
package com.example;
public interface Example {
public String getStr();
}
Класс com.example.ExampleImpl
реализует этот интерфейс:
package com.example;
public class ExampleImpl implements Example {
public String getStr() {
return "ExampleImpl's string.";
}
}
Вы объявили бы класс ExampleImpl
представляет собой реализацию Example
путем создания файла META-INF/services/com.example.Example
, содержащего текст com.example.ExampleImpl
.
Затем вы можете получить экземпляр каждой реализации Example
(включая экземпляр ExampleImpl
) следующим образом:
ServiceLoader loader = ServiceLoader.load(Example.class)
for (Example example : loader) {
System.out.println(example.getStr());
}
// Prints "ExampleImpl's string.", plus whatever is returned
// by other declared implementations of com.example.Example.
/ сотрудники / управление списком просмотра: отлично
EmployeesController
public function store(Request $request)
{
// Use validation
Employee::create($request->all());
return redirect()->route(employees.manage); //Try to use route
}
для использования формы HTML Laravel Collective это уменьшит ваш код. после добавления коллектива формы laravel
{!! Form::select('attendants', $attendants, $selected_val,['id'=>'id','class'=>'class']) !!}
Однострочный код для поля выбора и опций
используйте Validation