@Configuration
把一个类作为一个ioc容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Scope
作用域
@Lazy(true)
延迟初始化
@Service
用于标注业务层组件
@Controller
用于标注控制层组件
@Repository
用于标注数据访问组件,即DAO组件。
@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope
用于指定scope作用域的(用在类上)
@PostConstruct
用于指定初始化方法(用在方法上)
@PreDestory
用于指定销毁方法(用在方法上)
@Resource
默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
@DependsOn
定义Bean初始化及销毁时的顺序
@Primary
自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Autowired
默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用
@Autowired
@Qualifier(“personDaoBean”)
存在多个实例配合使用
@AliasFor
两个注解互为别名,成对出现,必须有默认值
@CrossOrigin
使用在类或方法上,使其具有跨域能力
springMVC的版本要在4.2或以上版本才支持
@Import
@Import直接引入一个类,将其作为Spring bean,受Spring容器管理(Spring 4.2.0以及之后版本可以使用)
@EnableWebMvc
@EnableWebMvc没有任何属性,只是@Import了一个类叫DelegatingWebMvcConfiguration。
使用该属性,可以自定义所有spring配置。
注意:
使用了@EnableWebMvc注解等于扩展了WebMvcConfigurationSupport但是没有重写任何方法。
所以有以下几种使用方式:
@EnableWebMvc+extends WebMvcConfigurationAdapter,在扩展的类中重写父类的方法即可,这种方式会屏蔽springboot的@EnableAutoConfiguration中的设置
extends WebMvcConfigurationSupport,在扩展的类中重写父类的方法即可,这种方式会屏蔽springboot的@EnableAutoConfiguration中的设置
extends WebMvcConfigurationAdapter,在扩展的类中重写父类的方法即可,这种方式依旧使用springboot的@EnableAutoConfiguration中的设置
@CookieValue
获取cookie中的值
@RequestMapping("/testCookie")
public String testCookie(@CookieValue(value="name",required=false) String name){
return "hello " + name;
}
@Async
Async注解能够在spring中开启多线程
首先需要使用@EnableAsync注解全局开启spring线程池,该注解通常标记在springboot启动类或者spring线程池配置类上。
然后@Async标记的方法会在bean初始化时注册到线程池中
spring线程池配置类
@Configuration
public class ThreadPoolTaskConfig {
@Bean
public Executor executor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//此方法返回可用处理器的虚拟机的最大数量; 不小于1
int core = Runtime.getRuntime().availableProcessors();
executor.setCorePoolSize(core);//设置核心线程数,默认为1
executor.setMaxPoolSize(core * 2 + 1);//设置最大线程数,默认为Integer.MAX_VALUE
executor.setKeepAliveSeconds(3);//除核心线程外的线程存活时间,默认为60s
executor.setQueueCapacity(40);//如果传入值大于0,底层队列使用的是LinkedBlockingQueue,否则使用SynchronousQueue,默认为Integer.MAX_VALUE
executor.setThreadNamePrefix("thread-execute");//线程名称前缀
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());//设置拒绝策略
return executor;
}
}
layout.tobs.jd.com design.tobs.jd.com
@Autowired与@Resource的区别
@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:
@Autowired()
@Qualifier("baseDao")
privateBaseDao baseDao;
@Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
@Resource(name="baseDao")
privateBaseDao baseDao;