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