Я не уверен, что есть «лучший» способ инициализации бина. Я думаю, что у каждого есть свои плюсы и минусы, и в зависимости от ситуации, один или другой может быть уместным. Это, конечно, не исчерпывающий список, но вот несколько вещей, которые следует учитывать.
Использование конструктора позволяет вам иметь неизменный компонент. Неизменяемые объекты хороши, если вы можете вписать их в свой дизайн. Они не требуют копирования, сериализованного доступа или другой специальной обработки между потоками. Если у вас есть сеттеры, ваш объект не является неизменным. Использование конструктора также обеспечивает правильную инициализацию объекта. После завершения конструктора объект является действительным. Если ваш объект требует использования установщиков для его инициализации, возможно, имеется недопустимый объект.
С другой стороны, использование конструкторов часто приводит к проблеме телескопирования. Часто вам понадобится много разных конструкторов, большинство из которых будет надмножеством другого конструктора. Часто это для удобства. Например:
public class Person {
public Person(String name) { ... }
public Person(String name, String phone) { ... }
public Person(String name, String phone, String email) { ... }
}
Одной из альтернатив, которая мне очень нравится, является так называемый «улучшенный» шаблон компоновщика, представленный Джошем Блохом в JavaOne. Вы можете увидеть это в его книге «Эффективная Java, второе издание». Если вы посмотрите на способ использования шаблона, он также решит проблему с методом afterProperties. Шаблон компоновщика гарантирует правильную инициализацию объекта.
Вот еще одно сообщение в блоге, в котором обсуждается шаблон: http://www.screaming -penguin.com / node / 7598
Я не уверен, что это соответствует вашим требованиям к пружине, но в целом я большой поклонник строителей.