Я новичок в Spring, но я обнаружил это рабочее решение. Скажите, пожалуйста, если это неприемлемо.
Я делаю Spring applicationContext
в этом компоненте:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class SpringUtils {
public static ApplicationContext ctx;
/**
* Make Spring inject the application context
* and save it on a static variable,
* so that it can be accessed from any point in the application.
*/
@Autowired
private void setApplicationContext(ApplicationContext applicationContext) {
ctx = applicationContext;
}
}
Вы можете поместить этот код в основную класс приложения, если вы хотите.
Другие классы могут использовать его следующим образом:
MyBean myBean = (MyBean)SpringUtils.ctx.getBean(MyBean.class);
Таким образом, любой bean-компонент может быть получен любым объектом в приложении (также запутанным с new
) и статическим способом.
Было бы немного проще, если бы вы использовали булевы значения вместо строк - также это обеспечило бы наличие только двух допустимых значений. Если ваше поле, скажем, оно называется Завершено , содержит логические значения (т. Е. Либо ИСТИНА, либо ЛОЖЬ), то, чтобы показать, все ли записи были заполнены, т.е. Если в столбце «Завершено» указано значение «ИСТИНА», вы просто используете MIN([Completed])
.
Это работает, потому что Tableau рассматривает True как большее, чем False, поэтому MIN (условие) имеет значение true тогда и только тогда, когда условие имеет значение True для каждой записи, игнорируя нули. MAX (условие) истинно тогда и только тогда, когда существует хотя бы одна запись с условием, установленным в True. Так что для логических значений вы можете прочитать MIN () как «каждый» и MAX () как «любой».
Единственный недостаток - если ваше логическое поле допускает нулевые значения. Если это так, вы можете выбрать один из нескольких вариантов. Вы можете использовать поведение по умолчанию, которое заключается в том, чтобы игнорировать пустые значения, как если бы они не существовали, или вы можете заключить ссылку на поле в вызов IFNULL (), чтобы предоставить значение по умолчанию по вашему выбору для замены пустых значений. Действительно то же самое для любого типа данных и функции агрегирования.
Этот метод полезен в нескольких ситуациях, включая определение условий для множеств.
Наконец, если ваш набор данных должен использовать строки, такие как «YES» и «NO» вместо логических значений, вы можете легко преобразовать в логические значения, определив новое вычисляемое поле, такое как «Completed» как [Completed-Original] = “YES”