IOC容器 BeanFactory 接口 ApplicationContext 接口 WebApplicationContext 接口 ClasspathXmlApplicationContext 基于XML配置的IOC容器 AnnotationConfigApplicationContext 基于注解的IOC容器 XmlWebApplicationContext web工程相关的IOC容器 Bean的作用域Spring注解@Configuration 代表这是一个java配置类 @Bean 装配bean注解,name属性可以不指定,默认是方法名作为bean的名称 @Component @ComponentScan basePackages :定义扫描的包 basePackageClasses :定义扫描的类 includeFilters excludeFilters: includeFilters 是定义满 足过滤器( Filter )条件的 Bean 扫描, excludeFi lters 排除过滤器条件的 Bean ,它们都需要 通过 个注解@Fi lt er 去定义。 ComponentScan(basePackages = "com.springboot.chapter3 . * ”, excludeFilters = {@Filter(classes = {Service . class})}) @Autowired 首先它会根据类型找到对应的 Bean, 如果对应类型的 Bean 不是唯 的,那么它会根据其属性名称和 Bean 的名称进行匹配。如果匹配得 上,就会使用该 Bean :如果还无法匹配,就会抛出异常。 @Primar 修改优先权的注解 ,告诉 pring IoC 容器 当发现有多个同样类型的 Bean 时, 优先使用加了@Primary注解的类进行注入 。 @Quelifier 指定根据名称注入,可以单独使用,但单独使用只能作用在方法上。 @Value 既可以加载属性,以加在方法上 。 @ConfigurationProperties 将properties属性文件的属性自动配置到pojo的属性中 @PropertySource 可以单独指定需要加载的配置文件 @PropertySource(value={” classpath : jdbc. properties ”} ,ignoreResourceNotFound=true) value可以配置多个配置文件。 @Conditional 条件装配 @Conditional(DatabaseConditiona.class) @Profile 配置不同环境下的properties文件 @ImportResource 引入对应的xml配置文件 @ImportResource (value = {'’ cl.as spa th: spring-other . xml"}) AOP注解@Aspect 声明一个类为切面 @Before 前置通知,在方法执行之前执行。 @After 后置通知,在方法执行之后执行(无论是否发生异常)还不能访问目标方法执行的结果。 @Around 环绕通知,围绕着方法执行。 @AfterThrowing 异常通知,在方法抛出异常之后。 @AfterReturning 返回通知,在方法正常结束后返回结果之后执行,可以访问方法的返回值。 @Pointcut 定义一个切点 异常处理HandlerExceptionResolver接口的实现类由核心控制器DispatcherServlet装载。 @ExceptionHandler 定义局部异常处理方法。 注意,该注解不是加在产生异常的方法上,而是加在处理异常的方法上。 @ExceptionHandler(AuthorizationException.class)
public Object handleAuthorizationException(AuthorizationException e, HttpServletRequest request) {
logger.error(e.getMessage(), e);
if (HttpServletUtils.jsAjax(request)) {
return R.error(403, "未授权");
}
return new ModelAndView("error/403");
} 产生异常时,异常信息会被前置处理器捕获到,然后交给ExceptionHandlerExceptionResolver进行解析并分派处理。上面的handleAuthorizationException方法上加了@ExceptionHandler(AuthorizationException.class)注解,就是对AuthorizationException异常的处理方法。 @ExceptionHandler 的value属性是一个Class 数组,因此我们可以在该注解的属性中加入多个异常类.当目标方法产生异常时,将被这个方法捕捉,我们可以得到异常的实例这个异常处理只能处理当前类产生的异常,是局部的异常处理方法。 @ExceptionHandler注解定义的方法优先级问题:例如发生的是NullPointerException,但是声明的异常有RuntimeException和Exception,这时候会根据异常的最近继承关系找到继承深度最浅的那@ExceptionHandler注解方法,即标记了RuntimeException 的方法。 @ControllerAdvice 定义全局异常处理方法。 当一个类加上@ControllerAdvice注解,告诉ExceptionHandlerExceptionResolver这个类是用来处理异常的。而具体的处理异常的方法加上@ExceptionHandler注解就行了。 ExceptionHandlerMethodResolver先在处理类内部找被@ExceptionHandler 注解的方法,如果找不到,就会去被@ControllerAdvice注解的的类中的 @ExceptionHandler 注解方法。 注意: 当被 @ExceptionHandler标记为异常处理方法,不能在方法中设置别的形参。但是可以使用ModelAndView向前台传递数据。
|