spring mvc
1.@Required注解的作用是什么
@Required注解用在 setter 方法上,它表明具有该注解的 bean 属性必须在配置时填充。否则,Spring容器将抛出BeanInitializationException异常。
此外,@Required与@Autowired不同——因为它仅限于setter,而@Autowired则不然。@Autowired也可用于连接构造函数和字段,而@Required仅检查属性是否已设置。
让我们看一个例子:
public class Person {
private String name;
@Required
public void setName(String name) {
this.name = name;
}
}
现在,需要在 XML 配置中设置Person bean的名称,如下所示:
<bean id="person" class="com.baeldung.Person">
<property name="name" value="Joe" />
</bean>
请注意,默认情况下,@Required不适用于基于 Java 的@Configuration类。如果您需要确保所有属性均已设置,则可以在使用@Bean注解的方法创建 bean 时执行此操作。
2.Spring 中的@Controller、@Component、@Repository和@Service注解有什么区别
根据 Spring 官方文档,@Component是任何 Spring 管理的组件的通用构造型。@Repository、@Service和@Controller是@Component的专门化,用于更具体的用例,例如,分别在持久层、服务层和表示层中。
让我们看一下后三个的具体用例:
@Controller – 表示该类充当控制器的角色,并检测类内的@RequestMapping注解
@Service –表示该类保存业务逻辑并调用存储库层的方法
@ Repository——表示该类定义了一个数据存储库;它的工作是捕获特定于平台的异常并将它们作为 Spring 统一的未经检查的异常之一重新抛出
3.@ExceptionHandler注解有什么 作用
@ExceptionHandler注释允许我们定义一个处理异常的方法。我们可以独立使用该注释,但与@ControllerAdvice一起使用是更好的选择 。这样,我们就可以建立一个全局的错误处理机制。这样,我们就不需要在每个控制器中都编写异常处理的代码了。
@ControllerAdvice
public class RestResponseEntityExceptionHandler
extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = { IllegalArgumentException.class,
IllegalStateException.class })
protected ResponseEntity<Object> handleConflict(RuntimeException ex,
WebRequest request) {
String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(),
HttpStatus.CONFLICT, request);
}
}
我们还应该注意,这将为 所有抛出 IllegalArgumentException或 IllegalStateException 的控制器提供@ExceptionHandler方法。使用@ExceptionHandler声明的异常应该与用作方法参数的异常匹配。否则,异常解决机制将在运行时失败。
这里要记住的一件事是,可以 为同一个异常定义多个@ExceptionHandler 。但我们不能在同一个类中执行此操作,因为 Spring 会抛出异常并在启动时失败。
另一方面,如果我们在两个单独的类中定义它们,应用程序将启动,但它将使用它找到的第一个处理程序,可能是错误的。