# 注解使用
声明bean:
@Component 组件,没有明确角色的组件
@Service 在业务逻辑层(Service层)使用
@Repositpry 在数据访问层(dao层)使用
@Controller 用于标注控制层组件
@RestController 由 @ResponseBody + @Controller 组成
@ComponentScan 扫描指定包下所有以上标注的注解类 并注册到spring容器里
@SpringBootApplication 相当于 @ComponentScan + @Configuration + @EnableAutoConfiguration
# 注入bean:
@Resource JSR-250提供使用
@Autowired Spring提供的注解
@Inject JSR-330提供使用
@Qualifier 指定需要自动装配的Bean的名称
# El和资源调用:
@Value
注入配置文件定义的值 @Value("#{server.port}")
注入值 @Value("老师")
注入系统名 @Value("#{systemProperties['os.name']}")
注入表达式 @Value("#{T(java.lang.Math).random() * 100 }")
注入其他bean @Value("#{otherBean.property}")
注入文件资源 @Value("#{classpath:com/test/test.txt}") private Resource testFile;
# 配置类注入:
@Configuration 标注在类上,注册为配置类使用,相当于配置的XML文件
@Bean 声明当前方法返回bean,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。注册bean的id默认为方法名,可以指定ID 如 @Bean("cacheManager")
注意:在spring 容器中,声明bean的方法的参数bean假如存在会自动注入,存在多个相同bean,用@Qualifier指定bean名注入
@ConfigurationPropertires(prefix="author",locations="classpath:config/author.properties") 加载配置文件自动注入方法内
# AOP声明:
@Aspect 声明切面类
@Before
@After
@Around 参数定义切点
@EnableAspectJAutoProxy 开启spring对切面的支持
# 静态变量注入:
private static String name;
//第一种
@PostConstruct
public void init() {
name = "me";
}
//第二种
@Autowired
public void setName() {
name = "me";
}
//第三种
@Value("me")
private static String name;
# 配置环境区别注入: @Profile => spring.profiles.active
@Configuration
public class config {
@Bean
@Profile("dev")
private Demo demo(){};
@Bean
@Profile("prod")
private Demo demo(){};
}
# 作用域
spring 默认注册的bean都为singleton
对于bean的作用域可用@Scope来注解使用
例子
@Bean
@Scope("prototype")
private Demo demo(){};
@Service
@Scope("prototype") // 指定
------------------- 待续
# 多线程
# 任务执行
# spring mvc 配置
#请求相关
@RequestMapping 请求路径匹配 可以使用通配符匹配 * 匹配任意字符 ** 匹配任意路径 ?匹配单个字符
@PathVariable 注解从请求URL中获取参数并映射到方法的参数中
@GetMapping("/{name}")
public String get (@PathVariable String name) {
return name;
}
@ResponseBody 注解直接将返回的对象输出到客户端
@RequestParam 注解从请求URL中获取param参数并映射到方法的参数中
@RequestHeader 注解从请求URL中获取header参数并映射到方法的参数中
Model - Spring MVC中通用的模型
ModelAndView - 包含了模型和视图路径的对象
JavaBean - 将HTTP参数映射到JavaBean对象
MultipartFile - 用于处理文件上传
@ModelAttribute - 用于将该注解的变量作为Model的一个属性
# 开启springmvc的支持 @EnableWebMvc
如下mvc 例子:
@EnableWebMvc
@Configuration
@EnableSwagger2
public class Swagger2Config extends WebMvcConfigurationSupport {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/classes/views/");
viewResolver.setSuffix(".jsp ");
viewResolver.setViewClass(JstlView.class);
return viewResolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
super.addResourceHandlers(registry);
}
}
对静态资源的访问 addResourceLocations
对外暴露的访问接口 addResourceHandler
# 拦截器使用 自定义实现拦截
public class InterFaceUseTimeInterceptor implements HandlerInterceptor {
/**
* controller 执行之前调用
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("------preHandle-----");
return true;
}
/**
* controller 执行之后,且页面渲染之前调用
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("------postHandle-----");
}
/**
* 页面渲染之后调用,一般用于资源清理操作
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("------afterCompletion-----");
}
}
#注册拦截器
-- 对于springboot
@Configuration
public class WebAppConfig implements WebMvcConfigurer {
@Resource
private InterFaceUseTimeInterceptor interFaceUseTimeInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注册自定义拦截器,添加拦截路径和排除拦截路径
registry.addInterceptor(interFaceUseTimeInterceptor).addPathPatterns("/**").excludePathPatterns("/swagger-ui.html");
}
}
-- 对于mvc 在spring-mvc.xml下
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/test/person"/> <mvc:mapping path="/test/code"/> <bean class="com.xxx.common.interceptor.LoginInterceptor"/> </mvc:interceptor>
# 控制器增强
@ControllerAdvice
# 基本日志配置
logging.file=logs/spring.log
logging.level.com.my.demo.user.controller = debug 指定包下的日志输出等级
# mvn 启动spring boot命令
mvn spring-boot:run
# 启动jar包指定环境
java -jar springweb.jar --spring.profiles.active=prod --server.port=80