Versions Compared

Key

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

...

Der oprettes en eller flere konfigurationsklasser, der er mærket med @Configuration. Dette er stederne, hvor Spring-beans (med @Bean) definerers og konfiguration af komponentene foretages. Der skal dermed på NSP anvendes konfigurationsklasser og ikke xml-filer.
Konfigurationsklasser bør være opdelt baseret på funktionalitet eller moduler. For eksempel kan der være en konfigurationsklasse for databasen, en for webservices, en for sikkerhed osv. Ved flere klasser samles de ved brug af @Import i en enkelt klasse 

Herunder eksmpel på en konfigurationsklasse fra NAS projektet.

Code Block
languagejava
titleConfiguration
@Configuration
@PropertySource("classpath:notificationbroker.properties")
public class NotificationBrokerSetup {

	public static final String SERVICE_NAME = "notificationbroker";

	private static final Properties properties = Config.load(SERVICE_NAME);

	@Bean
	public Properties properties() {
		return properties;
	}


	@Bean
	public NotificationBrokerService notificationBrokerService(TopicMappingDAO toppicMappingDao, Publisher publisher, AuditBuilderFactory auditBuilderFactory) {
		return new NotificationBrokerServiceImpl(toppicMappingDao, publisher, auditBuilderFactory);
	}
...


@Bean-metoder:
Brug @Bean-metoder i konfigurationsklasserne til at definere Spring-beans.
Navngiv metoder og beans fornuftigt, så det er nemt at forstå, hvilken rolle de spiller i applikationen (DAO, WsdlResponseGenerator, StatusResponseGenerator mm.) - i eksmplet fra NAS ovenfor Properties og notificationBrokerService.


Ved flere klasser samles de ved brug af @Import i en enkelt 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. Herunder ses inklusionen af NotificationBrokerService-bean'en fra først nævnte konfigurationsklasse.

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

...
	@Autowired
	private NotificationBrokerService service;

...



ApplicationContext:
Opret og konfigurer en ApplicationContext ved hjælp af AnnotationConfigApplicationContext.
Denne skal konfigureres med de konfigurationsklasser der er relevante
Gem ApplicationContext i ServletContext for at gøre det tilgængeligt for resten af applikationen.

...