Консенсус заключается в использовании словаря для этого - см. другие ответы. Это хорошая идея для большинства случаев, однако есть много аспектов, связанных с этим:
Тем не менее, я реализовал variable variables manager -класс, который предоставляет некоторые из вышеперечисленных идей. Он работает для python 2 и 3.
Вы использовали бы класс следующим образом:
from variableVariablesManager import VariableVariablesManager
myVars = VariableVariablesManager()
myVars['test'] = 25
print(myVars['test'])
# define a const variable
myVars.defineConstVariable('myconst', 13)
try:
myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
print("not allowed")
except AttributeError as e:
pass
# rename a variable
myVars.renameVariable('myconst', 'myconstOther')
# preserve locality
def testLocalVar():
myVars = VariableVariablesManager()
myVars['test'] = 13
print("inside function myVars['test']:", myVars['test'])
testLocalVar()
print("outside function myVars['test']:", myVars['test'])
# define a global variable
myVars.defineGlobalVariable('globalVar', 12)
def testGlobalVar():
myVars = VariableVariablesManager()
print("inside function myVars['globalVar']:", myVars['globalVar'])
myVars['globalVar'] = 13
print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
testGlobalVar()
print("outside function myVars['globalVar']:", myVars['globalVar'])
Если вы хотите разрешить переписывание переменных с помощью только тот же тип:
myVars = VariableVariablesManager(enforceSameTypeOnOverride = True)
myVars['test'] = 25
myVars['test'] = "Cat" # <- raises Exception (different type on overwriting)
После включения уровня журнала отладки для весны и прохождения обширных журналов я обнаружил, что сканирование для различных компонентов, таких как JPA-репозитории, JPA-объекты и т. д., зависит от имени пакета Application.java.
Если репозитории JPA или Entities не находятся в подпакетах пакета Application.java
, тогда нам нужно явно указать их следующим образом:
@Configuration
@ComponentScan(basePackages="com.sivalabs.jcart")
@EnableAutoConfiguration
@EnableJpaRepositories(basePackages="com.sivalabs.jcart")
@EntityScan(basePackages="com.sivalabs.jcart")
public class Application{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
С помощью вышеуказанных дополнительных @EnableJpaRepositories
, @EntityScan
я могу запускать он использует Run As -> Java Application.
Но все еще не уверен, как он работает нормально, когда Run As -> Spring Boot App !!
В любом случае, я думаю, что лучше двигаться мой пакет Application.java
до com.myapp
, а не борьба с SpringBoot!
У меня такая же проблема. Только добавление аннотации @EnableJpaRepositories может решить проблему. Я попытался определить basePackages в @SpringBootApplication, но безрезультатно. Я думаю, что пакет класса Application загружается в процесс сканирования JpaRepositories, но другие пакеты, определенные в @SpringBootApplication, игнорируются. Это похоже на ошибку / улучшение Spring Boot.