/**
 * 初始化一些数据
 *
 */
public class ApplicationInitialListener implements ApplicationListener<ContextRefreshedEvent>{
    
    /**
     * 避免刷新root-application容器和project-name容器时执行两次代码的类变量
     */
    private static boolean isStart=false;
    
    @Autowired
    private UserService userService;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent arg0) {
        if(!isStart){
            isStart=true;
        }else{
            setDefaultUser();
        }
    }

    /**
     * 设置一个默认的用户
     */
    private void setDefaultUser() {
        User entity = this.userService.findByName("administrator");
        if (entity == null) {
            User user = new User();
            user.setName("administrator");
            user.setPassword("123456");
            this.userService.save(user);
        }
    }

}


ContextRefreshedEvent:当ApplicationContext初始化或者刷新时触发该事件。

如何使用它呢?

前段时间用注解来配置的时候说过,

/**
 * 替代Web.xml 的配置代码
 */
public class DefaultConfigration implements WebApplicationInitializer {

	@Override
	public void onStartup(ServletContext context) throws ServletException {
		context.addListener(new ContextLoaderListener());
		context.addListener(new WebAppRootListener());
		context.setInitParameter("contextConfigLocation", "classpath*:**/*Context.xml");
	}

}

加载了spring的配置文件进去了,然后又可以利用spring的context:component-scan来扫描一些包:

<context:component-scan base-package="com.boventech.learning" use-default-filters="false">
		<context:include-filter type="regex"
			expression="com.boventech.learning.controller.*Controller" />
		<context:include-filter type="regex"
			expression="com.boventech.learning.daoImpl.*Impl" />
		<context:include-filter type="regex"
			expression="com.boventech.learning.serviceImpl.*Impl" />
		<context:include-filter type="regex"
           expression="com.boventech.learning.listener.*" />
	</context:component-scan>


这个时候扫描到了listener包,上面那个.java文件在listener内部,所以可以扫描到。继而执行了。

老妈上星期脚伤了,端午节一放假就要回老家,下午已经有点晚了,怕没车赶慌,拿的东西也有些多,结果忘记拿笔记本充电器了,在老家问了半天有没有thinkpad的方口充电器,结果愣是没找到,都说:那是新充电器,都没有人坏。端午看能不能早点搭车到上班的地方去,在哪里再学习。草,运气真糟


参考文章

spring发布和接收定制的事件(spring事件传播)


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐