Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Ved flere klasser samles de ved brug af @Import i en enkelt klasse.

Info

DI.1.4 § Skal flere klasser samles logisk bruges @Import i en samlende java-klasse

Her samler NotificationBrokerServerSetup således konfigurationsklassen ovenfor og bla. en Database-konfigurationsklasse.

Code Block
languagejava
titleImport
@Configuration
@Import({ NotificationBrokerSetup.class, PublisherSetup.class, DatabaseSetup.class })
public class NotificationBrokerServerSetup {

	@Bean
	public DataSource primaryDataSource(@Value("${datasource.jndi}") String jndiName) {
		JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
		DataSource dataSource = dataSourceLookup.getDataSource(jndiName);
		return dataSource;
	}
...

Afhængigheder og injection

...

Brug @Autowired for at injecte afhængigheder i HttpServletten.  Dette valg er bevidst truffet for kun at implementere injektionen i denne servlet-klasse og ikke introducere yderligere kompleksitet eller struktur i andre dele af applikationen. Denne tilgang fokuserer på at holde koden inden for HttpServlet-konteksten mere kortfattet og læsbar, hvilket letter udvikling og vedligeholde den specifikke servlet.

Info

DI.1.5 § De definerede beans injectes med @Autowired annotationen i HttpServletten. Det er kun i HttpServletten dette foretages.

Herunder ses inklusionen af NotificationBrokerService-bean'en fra først nævnte konfigurationsklasse. Derudover kan @Value annotationen bruges til properties mm.

Code Block
languagejava
titleAutowired & Value
@WebServlet("/*")
public class NotificationBrokerServlet extends HttpServlet {

...
	@Value("${dgws.headers.required}")
	private boolean dgwsHeadersRequired;

...

    @Autowired
	private NotificationBrokerService service;

...

...


Lifecycle Management


Opret og konfigurer en ApplicationContext ved hjælp af AnnotationConfigApplicationContext / AnnotationConfigWebApplicationContext. Det skal være en af disse to for at muliggøre brugen af konfigurationsklasserne.

Info

DI.1.6 § Der skal anvendes een af AnnotationConfigApplicationContext / AnnotationConfigWebApplicationContext som ApplicationContext-implementationsklasse.


Denne skal konfigureres med de konfigurationsklasser der er relevante
Gem ApplicationContext'en gemmes i ServletContext for at gøre det den tilgængeligt for resten af applikationen.Lifecycle Management:


Brug ServletContextListener-interfaces til at initialisere og rydde op i ApplicationContext i komponenten. Sørg for, at Ligeledes skal ApplicationContext lukkes korrekt, når webapplikationen stoppes.

Info

DI.1.7 § ApplicationContext'en skal oprettes og nedlægges ved hhv. contextInitialized og contextDestroyed på ServletContext'en.


Injection i servlets:
På servlettens init-metode skal AnnotationConfigApplicationContext’en hentes (via ServletContexten) og herigennem skal den aktuelle Servlet have sine afhængigheder injected. Dette skal foregå ved kald til autowireBean og give Servlet-instansen med.

...