组件相关注解
@Controller
修饰MVC中controller层的组件,SpringBoot中的组件扫描功能会识别到该注解,并为修饰的类实例化对象,通常与**@RequestMapping联用**,当SpringMVC获取到请求时会转发到指定路径的方法进行处理。
@Controller
@RequestMapping("/admin")
public class UmsAdminController {
}
@Service
于修饰service层的组件,service层组件专注于系统业务逻辑的处理,同样会被组件扫描并生成实例化对象。
@Service
public class UmsAdminServiceImpl implements UmsAdminService {
}
@Repository
用于修饰dao层的组件,dao层组件专注于系统数据的处理,例如数据库中的数据,同样会被组件扫描并生成实例化对象。
@Repository
public interface UmsAdminRoleRelationDao {
}
@Component
用于修饰SpringBoot中的组件,会被组件扫描并生成实例化对象。@Controller、@Service、@Repository都是特殊的组件注解。
@Component
public class CancelOrderSender {
依赖注入注解
@Autowired
会根据对象的类型自动注入依赖对象,默认要求注入对象实例必须存在,可以配置required=false来注入不一定存在的对象。
@Controller
@RequestMapping("/admin")
public class UmsAdminController {
@Autowired
private UmsAdminService adminService;
}。
@Resource
默认会根据对象的名称自动注入依赖对象,如果想要根据类型进行注入,可以设置属性为type = UmsAdminService.class。
@Controller
@RequestMapping("/admin")
public class UmsAdminController {
@Autowired
@Resource(name = "umsAdminServiceImpl")
private UmsAdminService adminService;
}
@Qualifier
当同一个对象有多个实例可以注入时,使用@Autowired注解无法进行注入,这时可以使用@Qualifier注解指定实例的名称进行精确注入。
@Controller
@RequestMapping("/admin")
public class UmsAdminController {
@Autowired
@Qualifier("umsAdminServiceImpl")
private UmsAdminService adminService;
}
实例与生命周期相关注解
@Bean
用于修饰方法,标识该方法会创建一个Bean实例,并交给Spring容器来管理
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@Scope
用于声明一个SpringBean实例的作用域,作用域的范围有以下几种:
singleton:单例模式,在Spring容器中该实例唯一,Spring默认的实例模式。
prototype:原型模式,每次使用实例都将重新创建。
request:在同一请求中使用相同的实例,不同请求重新创建。
session:在同一会话中使用相同的实例,不同会话重新创建。
@Configuration
public class RestTemplateConfig {
@Bean
@Scope("singleton")
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@Primary
当同一个对象有多个实例时,优先选择该实例。
@Configuration
public class JacksonConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper;
}
}
@PostConstruct
用于修饰方法,当对象实例被创建并且依赖注入完成后执行,可用于对象实例的初始化操作。
@PreDestroy
用于修饰方法,当对象实例将被Spring容器移除时执行,可用于对象实例持有资源的释放。
public class DynamicSecurityMetadataSource implements FilterInvocationSecurityMetadataSource {
private static Map<String, ConfigAttribute> configAttributeMap