类代码
@Component public class RegisterConfig { @Autowired private DepartMentService departMentService; public void setDepartMentService(DepartMentService departMentService) { this.departMentService = departMentService; } private static RegisterConfig registerConfig; @PostConstruct public void init(){ registerConfig = this; registerConfig.departMentService = this.departMentService; } public static String RootPath = System.getProperty("register.webapp"); public static int DepartMentIDLength(){ if(departMentIDLength == 0){ departMentIDLength = registerConfig.departMentService.departMentUnitIDLength(); } return departMentIDLength; } private static int departMentIDLength = 0;其中:@Component, @PostConstruct 还有private static RegisterConfig registerConfig;是关键,原理应该是容器启动时实例化了RegisterConfig ,注入了departMentService,调用了init(),并将RegisterConfig.registerConfig初始化,然后就可以使用了。
因application.xml中的xml配置为 default-lazy-init=”true” ,所以要在这个配置文件中加入一个配置,让RegisterConfig 可以在容器启动时就注入。
<beans> <bean id="registerConfig" class="com.register.normalClass.RegisterConfig" init-method="init" lazy-init="false"> </bean> </beans>```注: 这样处理后是可以注入了,但是这个类中的一个读取根目录的变量却读取不到了,System.getProperty读到的是null
public static String RootPath = System.getProperty("register.webapp");这就需要在启动监听里设置一下这个值:
//RegisterConfig加了静态注入后,这个值就取不到了,所有在这个地方给他赋值 RegisterConfig.RootPath = System.getProperty("register.webapp");如果哪位有更好的方法,请在评论里给一下,谢谢