@Autowired
public void set(ApplicationContext a) {
ctx = a;
System.out.println("a111111111----------" + ctx);
}
public static ApplicationContext getApplicationContext() {
System.out.println("ctx222222----------" + ctx);//为什么是空的?
return ctx;
}
public class MyListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
ApplicationContext ctx=SpringContext.getApplicationContext();
//
System.out.println(ctx);//也是空的。
}
}
因为 ServletContextListener 初始化的时候,spring还没初始化,set 方法还未执行。
1 个赞
我也发现了,set的时候有值,打印的时候,是先打印get里面的,set 的值在下面。
怎么解决呢
没法解决,因为这个监听器就是会比spring先初始化。你不如直接说你要干啥,要实现什么?也许可以考虑使用spring的监听器。
1 个赞
学习中,想法是在网站运行的时候,提前按权限把网站模块信息加载出来。
用ContextRefreshedEvent,又不能把结果传到全局变量里。
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
// TODO Auto-generated method stub
SpringContext.setContext(event.getApplicationContext());
GroupDao groupDao = SpringContext.getBean(GroupDao.class);
//
System.out.println(groupDao);
List<Group> list = groupDao.findByGroupStatus(true);
for (Group g : list) {
System.out.println(g.getGroupName());
}
//event.getServletContext().setAttribute("GROUP_LIST", list);
}
用这个没有问题,但怎么放到全局变量里? 。。event 怎么放到Attribute里?
applicationContext也是可以注入的。
弄了好长时间了,没弄明白。。。
你在监听器里面。用@Autowired 注入进ApplicationContex就是了。
你要是不会,我明天给你代码。这会儿我睡了得。命要紧。
好的 先谢谢了
可以在Spring监听器里,注入 ServletContext
,在事件方法里完成初始化。
import javax.servlet.ServletContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextListener implements ApplicationListener<ContextRefreshedEvent>{
@Autowired
private ServletContext servletContext;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
ApplicationContext applicationContext = event.getApplicationContext();
if (applicationContext.getParent() != null) {
// 初始化数据到 servletContext
servletContext.setAttribute("name", "value");
}
}
}
1 个赞
我试试。
解决了,试试!!