Heim  >  Artikel  >  Java  >  Detaillierte Einführung in JavaConfig-Annotationen in Spring

Detaillierte Einführung in JavaConfig-Annotationen in Spring

黄舟
黄舟Original
2017-03-09 11:01:241352Durchsuche

Bei der Entwicklung von Java-Programmen, insbesondere von Java EE-Anwendungen, ist es immer unvermeidlich, sich mit verschiedenen Konfigurationsdateien auseinanderzusetzen. Java-Annotationen helfen uns dabei, alles aufgeräumter zu gestalten und zu verhindern, dass Konfigurationsdateien überall herumfliegen. Der folgende Artikel stellt hauptsächlich die JavaConfig-Anmerkungen im Frühjahr im Detail vor. Freunde, die sie benötigen, können darauf zurückgreifen.

Vorwort

Jeder weiß, dass traditionelles Spring im Allgemeinen auf der XML-Konfiguration basiert, aber später wurden viele JavaConfig-Anmerkungen hinzugefügt. Vor allem Springboot ist im Grunde eine Java-Konfiguration. Wenn Sie es nicht verstehen, sind Sie wirklich nicht daran gewöhnt. Machen Sie hier eine Notiz.

@RestController

Um die Entwicklung restlicher Anwendungen bequemer zu unterstützen, wurden in Spring 4 RestController-Anmerkungen hinzugefügt. Weitere Funktionen als Controller-Anmerkungen sind unten aufgeführt Die RequestMapping-Methode fügt standardmäßig die Annotation „ResponseBody“ hinzu, sodass Sie die Annotation nicht zu jeder einzelnen Annotation hinzufügen müssen.

@Configuration

Diese Annotation gibt an, dass es sich bei dieser Klasse um die Konfigurationsklasse von Spring handelt und sie wird mit der Component-Annotation geliefert

@ ImportResource

Das entsprechende XML

<import resource="applicationContext-ehcache.xml"/>

Existenznotwendigkeit

Dies ist mit der herkömmlichen XML-Konfiguration kompatibel. JavaConfig kann beispielsweise aop:advisor und tx:advice nicht gut unterstützen. Führen Sie @Configuration ein. basierendes Äquivalent zum aop:config XML-Element

@ComponentScan

entsprechendes XML

<context:component-scan base-package="com.xixicat.app"/>

Diese Konfiguration umfasst automatisch die folgenden Konfigurationsfunktionen:

<context:annotation-config/>

ist die Registrierung von AutowiredAnnotationBeanPostProcessor (erforderlich für die Verwendung von @Autowired), CommonAnnotationBeanPostProcessor( Es gibt vier BeanPostProcessor (muss registriert sein, um @Resource, @PostConstruct, @PreDestroy usw. zu verwenden), PersistenceAnnotationBeanPostProcessor (muss registriert sein, um @PersistenceContext zu verwenden) und RequiredAnnotationBeanPostProcessor (muss registriert sein, um @Required zu verwenden).

Es ist erwähnenswert, dass die Spring 3.1RC2-Version es nicht zulässt, dass sich mit „Configuration“ annotierte Klassen innerhalb des von ComponentScan angegebenen Paketbereichs befinden, andernfalls wird ein Fehler gemeldet.

@Bean

Die entsprechende XML lautet wie folgt:

<bean id="objectMapper" class="org.codehaus.jackson.map.ObjectMapper" />

@EnableWebMvc

Die entsprechende XML lautet wie folgt:

<mvc:annotation-driven />

Diese Konfiguration wird automatisch registriert DefaultAnnotationHandlerMapping( zum Registrieren der Zuordnungsbeziehung zwischen Handler-Methode und Anforderung) und AnnotationMethodHandlerAdapter (Verarbeiten der Parameter der Handler-Methode vor dem eigentlichen Aufruf) sind zwei Beans zur Unterstützung der Verwendung von @Controller-Annotationen.

Die Hauptfunktionen sind wie folgt:

  1. Konfigurierbarer ConversionService (praktisch für benutzerdefinierte Typkonvertierung)

  2. Unterstützung mit @ NumberFormat formatiert numerische Felder

  3. Unterstützt die Verwendung von @DateTimeFormat zum Formatieren von Datums-, Kalender- und Joda-Zeitfeldern (wenn der Klassenpfad Joda-Zeit enthält)

  4. Unterstützung @Valid-Parameterüberprüfung (wenn sich der JSR-303-bezogene Anbieter im Klassenpfad befindet)

  5. Unterstützung des XML-Lesens und Schreibens der @RequestBody/@ResponseBody-Annotation (wenn JAXB im Klassenpfad ist)

  6. Unterstützt JSON-Lesen und Schreiben von @RequestBody/@ResponseBody-Annotationen (wenn Jackson sich im Klassenpfad befindet)

@ContextConfiguration

Geben Sie hauptsächlich die Java-Konfiguration während des Junit-Tests an

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({
 "classpath*:spring/*.xml",
 "classpath:applicationContext.xml",
 "classpath:applicationContext-rabbitmq.xml",
 "classpath:applicationContext-mail.xml",
 "classpath:applicationContext-medis.xml",
 "classpath:applicationContext-mybatis.xml"})
@TransactionConfiguration(transactionManager = "mybatisTransactionManager", defaultRollback = false)
public class AppBaseTest {
 //......
}

@ResponseStatus

wird hauptsächlich für die Restentwicklung verwendet. Den zurückgegebenen HTTP-Rückgabecode finden Sie in der Aufzählung org.springframework.http.HttpStatus. Im Allgemeinen gibt die Post-Methode HttpStatus.CREATED zurück und die DELETE- und PUT-Methoden geben HttpStatus.OK zurück. Sie können auch die Ausnahmebehandlung konfigurieren, siehe @ExceptionHandler und @ControllerAdvice

@ExceptionHandler

wird hauptsächlich zur Behandlung bestimmter Ausnahmen und zur Rückgabe des angegebenen HTTP-Statuscodes verwendet , wobei jede Controller-Methode ihren eigenen Try-Catch speichert. Im Allgemeinen können Sie für jede Anwendung eine Ausnahmebasisklasse definieren und dann Geschäftsausnahmen definieren, sodass Geschäftsausnahmen einheitlich erfasst werden können.

@ExceptionHandler(BizException.class)
 @ResponseStatus(HttpStatus.BAD_REQUEST)
 public @ResponseBody
 ReturnMessage bizExceptionHandler(Exception ex) {
  logger.error(ex.getMessage(),ex);
  return new ReturnMessage(HttpStatus.BAD_REQUEST.value(),ex.getMessage());
 }

Es ist jedoch zu beachten, dass diese Methode auf Ausnahmen beschränkt ist, die von der Methodenaufrufkette des Controllers generiert werden. Was ist, wenn auch geplante Aufgaben verwendet werden? Frühling? Ja, diese Anmerkung wird nicht abgefangen.

@ControllerAdvice

Wird mit @ExceptionHandler verwendet, um die Controller-Methode abzufangen.

@ControllerAdvice
public class ErrorController {
 
 private static final Logger logger = LoggerFactory.getLogger(ErrorController.class);
 
 @ExceptionHandler(BizException.class)
 @ResponseStatus(HttpStatus.BAD_REQUEST)
 public @ResponseBody
 ReturnMessage bizExceptionHandler(Exception ex) {
  logger.error(ex.getMessage(),ex);
  return new ReturnMessage(HttpStatus.BAD_REQUEST.value(),ex.getMessage());
 }
 
 @ExceptionHandler(Exception.class)
 @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
 public @ResponseBody
 ReturnMessage serverExceptionHandler(Exception ex) {
  logger.error(ex.getMessage(),ex);
  return new ReturnMessage(HttpStatus.INTERNAL_SERVER_ERROR.value(),ex.getMessage());
 }
}

Zusammenfassung

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in JavaConfig-Annotationen in Spring. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn