2019独角兽企业重金招聘Python工程师标准>>>
@Configuration声明当前类是一个配置类
@ConfigurationScan,自动扫描包名下所有使用@service,@component,@repository和@controller的类,并注册为bean
@EnableAsync 开启异步方法的支持
@EnableScheduling来开启对任务计划的支持,然后在要执行计划任务的方法上?@ Scheduled,声明这是一个计划任务
spring通过@Scheduled支持多种类型的计划任务,包含cron,fixDelay,fixRate等
@Profile 注解类或者方法,达到不同情况下选择不同的bean
scope
1. singleton作用域(scope 默认值)
把 一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都 将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader中 只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为singleton时 候,spring的IOC容器中只会存在一个该bean。
2. prototype
prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当与一个new的操作
3. request
request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
4. session
session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
5. global session
global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。
6. 自定义bean装配作用域
spring的作用域由接口org.springframework.beans.factory.config.Scope来定 义,自定义自己的作用域只要实现该接口即可,下面给个实例:我们建立一个线程的scope,该scope在表示一个线程中有效,代码如下:
publicclass MyScope implements Scope { privatefinal ThreadLocal threadScope = new ThreadLocal() {protected Object initialValue() {returnnew HashMap(); } }; public Object get(String name, ObjectFactory objectFactory) { Map scope = (Map) threadScope.get(); Object object = scope.get(name); if(object==null) { object = objectFactory.getObject(); scope.put(name, object); } return object; } public Object remove(String name) { Map scope = (Map) threadScope.get(); return scope.remove(name); }publicvoid registerDestructionCallback(String name, Runnable callback) { }public String getConversationId() {// TODO Auto-generated method stubreturnnull;}
}