springboot学习笔记二

Enable*与import

package da.test2;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
import org.springframework.scheduling.annotation.EnableAsync;

/**
 * @EnableConfigurationProperties 开启一个特性,这个特性可以把配置文件的属性注入到bean里面,一般与@ConfigurationProperties一起用
 * 
 * @EnableAsync 启用异步,一般与@Async一起用
 * 
 * @Import 可以导入一个或者多个类,或者配置类
 */
@EnableAsync
@EnableConfigurationProperties
@Import(ImportTest.class)
@ComponentScan
public class Springboot01Application2 {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Springboot01Application2.class, args);
        System.out.println(context.getBean(User.class));
        context.getBean(Runnable.class).run();
        // context.getBean(AsyncTest.class).run(); 不知道为什么这样写会找不到这个类
        System.out.println("------end-----");
        System.out.println(context.getBean(ImportTest.class));
        context.close();
    }
}
package da.test2;

import java.util.concurrent.TimeUnit;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

@Component
public class AsyncTest implements Runnable {
    @Async
    public void run() {
        try {
            for (int i = 1; i <= 3; i++) {
                TimeUnit.SECONDS.sleep(1);
                System.out.println("=================" + i);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

事件监听

package da.test3;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * 1.自定义事件:一般都是继承ApplicationEvent类
 * 
 * 2.自定义监听器:一般都是实现ApplicationListener接口
 * 
 * 3.启动的时候要把监听器加入到spring容器中
 * 
 * 3.还可以通过application.properties配置监听器
 * 
 * 4.发布事件:使用ApplicationContext.publishEvent发布需求
 *
 */
@SpringBootApplication
public class Springboot01Application3 {

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(Springboot01Application3.class);
        //app.addListeners(new MyApplicationListener());
        ConfigurableApplicationContext context = app.run(args);
        context.publishEvent(new MyApplicationEvent(new Object()));
        context.close();
    }
}

事件类与监听类

package da.test3;

import org.springframework.context.ApplicationEvent;

public class MyApplicationEvent extends ApplicationEvent {
    private static final long serialVersionUID = 1L;

    public MyApplicationEvent(Object source) {
        super(source);
    }

}
package da.test3;

import org.springframework.context.ApplicationListener;

public class MyApplicationListener implements ApplicationListener<MyApplicationEvent> {

    @Override
    public void onApplicationEvent(MyApplicationEvent arg0) {
        System.out.println("已经接收到事件:" + arg0.getClass());
    }

}

在配置文件中注册监听

#注册监听器
context.listener.classes=da.test3.MyApplicationListener

其他

package da.test4;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * @SpringBootApplication 中可以定义以哪个地方为基类来扫描,也可以定义不扫描哪个类或者哪个包
 */
@SpringBootApplication
public class Springboot01Application4 {

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(Springboot01Application4.class);
//      app.setBannerMode(Banner.Mode.OFF); 关闭banner banner:不显示spring那个logo
        ConfigurableApplicationContext context = app.run(args);
        context.close();
    }
}

banner: 在src/main/resources下直接放置banner.txt或者banner.jpg/banner.png/banner.gif 启动动画会改变

在application.properties中也能指定banner的名字与位置:

banner.image.location=my.jpg

你可能感兴趣的:(学习笔记)