1、@Configuration
告诉spring这是一个java配置文件(类),spring会根据这个文件生成IoC容器 AppConfig(java配置类)相当于beans.xml配置文件
2、@Bean
将当前方法返回的POJO装配到IoC容器中(作用等同于bean标签)name属性用于定义这个bean的名称,如果没有配置将会默认使用方法名作为名字类型为方法的返回值类型
应用场景:如果需要装配第三方的bean,没有办法在第三方的类上加组件扫描(@Component),只能用过@Bean的方式装配Bean对象!
@Configuration
public class AppConfig {
@Bean(name="user")
public User getUser() {
User user = new User();
user.setName("刘德华");
user.setAge(20);
return user;
}
}
3、@Component、@Controller、@Service、@Repository
被这些注解标记的类会被SpringIoC容器扫描装配为Bean,把类的实例交给Spring管理,其中配置的@Component(“userDao”)将作为Bean的名称,也可以不指定 如果不指定,IoC容器会将类名第一个字母小写,其余不变作为bean的名称
4、@ComponentScan
让Spring进行扫描,默认只扫描此类所在的包及其子包,也可以指定所扫描的包和类 ,常与@Configuration配合使用
@ComponentScan("com.tedu.*"):也可以指定所扫描的包(com.tedu包及其子包)
@ComponentScan(basePackages = {"com.tedu.dao","com.tedu.service"}):当需要扫描的包有多个时,可以指定多个包。
@Configuration
@ComponentScan
public class AppConfig {
...
}
5、@Lazy
用于描述类,其目的是告诉spring框架此类支持延迟加载,当需要时才去初始化,通常会配合单例作用域使用
一般在springboot项目启动时就更具配置信息初始化所有的单例Bean,如果有大对象,也不是很着急用可以启用延时加载特性,可以节省内存消耗
6、@Scope
指定bean的作用域,如果不指定,默认是单例singleton,可以指定为多例prototype
singleton:整个内存中只有一份bean实例,此实例何时创建与延时加载有关,实例创建以后,bean的生命周期会由spring管理,------使用频率高,且没有线程安全
protoype:每次获取都需要创建实例,此实例的创建于延时加载无关,实例创建后,不会交给spring管理,spring会负责初始化,但不负责销毁-----大对象,不常用的,线程不安全的,也就是被多个线程共享的建议多例
@Component("userDao")
@Scope("singleton")
@Lazy(true)
public class UserDao {
}
7、@PostConstruct
描述的方法为生命周期初始化方法,在对象构建以后执行
8、@PreDestroy
注解描述的方法为生命周期销毁方法,此方法所在的对象,假如存储到了spring容器,那这个对象在从spring容器移除之前会先执行这个生命周期销毁方法(prototype作用域对象不执行此方法
@Scope("singleton")
@Lazy
@Component
public class ObjectPool{
public ObjectPool(){
System.out.println("ObjectPool()");
}
@PostConstruct
public void init(){
System.out.println("init()");
}
@PreDestroy
public void destory(){
System.out.println("destory()");
}
}
9、@Value
为Bean的属性赋值
@Component
public class User {
//提供私有成员变量
@Value("赵云")
private String name;
@Value("24")
private Integer age;
...
}
10、@Autowired
用于描述类中属性或相关方法(例如构造方法)。Spring框架在项目运行时假如发现由他管理的Bean对象中有使用@Autowired注解描述的属性或方法,可以按照指定规则为属性赋值(DI)
11、@Qualifier
对属性或参数进行描述,当创建了多个相同类型的bean时如果想要为其中的某一个赋值,可使用此注解,需要和@Autowired配合使用
@SpringBootTest
public class CacheTests {
@Autowired
@Qualifier("softCache")//使用softCache为属性赋值
private Cache cache;
@Test
public void testCache() {
System.out.println(cache);
}
}
12、@RequestMapping
@RequestMapping是一个用来处理请求地址映射的注解,可用于类或者方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestMapping注解有六个属性
1)value(常用)
指定请求的实际地址,指定的地址可以是URI Template模式。
2)method(常用)
指定请求的method类型,GET、POST、PUT、DELETE等。
3)consumes
指定处理请求的提交内容类型(Content-Type),例如application/json,text/html。
4)produces
指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
5)params
指定request中必须包含某些参数值才让该方法处理。
6)headers
指定request中必须包含某些指定的header值,才能让该方法处理请求。
//这俩行意义相同
@RequestMapping(value="/doParam01",method = RequestMethod.GET)
@GetMapping("/doParam01")
13、@ResponseBody
该注解表示返回的类型为Json格式的字符串,可以用在类和方法上,用在类上表示该类里边的所有方法都加上了@ResponseBody
用在类上时,可以用@RestController,代替@ResponseBody+@Controller