Add Kotlin code samples to the AOT documentation
Closes gh-33761
This commit is contained in:
parent
599d53465b
commit
6c93c67dd4
|
@ -290,6 +290,19 @@ Java::
|
||||||
|
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
|
Kotlin::
|
||||||
|
+
|
||||||
|
[source,kotlin,indent=0,subs="verbatim,quotes"]
|
||||||
|
----
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
class UserConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
fun myInterface(): MyInterface = MyImplementation()
|
||||||
|
|
||||||
|
}
|
||||||
|
----
|
||||||
======
|
======
|
||||||
|
|
||||||
In the example above, the declared type for the `myInterface` bean is `MyInterface`.
|
In the example above, the declared type for the `myInterface` bean is `MyInterface`.
|
||||||
|
@ -314,6 +327,19 @@ Java::
|
||||||
|
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
|
Kotlin::
|
||||||
|
+
|
||||||
|
[source,kotlin,indent=0,subs="verbatim,quotes"]
|
||||||
|
----
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
class UserConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
fun myInterface() = MyImplementation()
|
||||||
|
|
||||||
|
}
|
||||||
|
----
|
||||||
======
|
======
|
||||||
|
|
||||||
If you are registering bean definitions programmatically, consider using `RootBeanBefinition` as it allows to specify a `ResolvableType` that handles generics.
|
If you are registering bean definitions programmatically, consider using `RootBeanBefinition` as it allows to specify a `ResolvableType` that handles generics.
|
||||||
|
@ -371,6 +397,15 @@ Java::
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
|
Kotlin::
|
||||||
|
+
|
||||||
|
[source,kotlin,indent=0,subs="verbatim,quotes"]
|
||||||
|
----
|
||||||
|
class ClientFactoryBean<T : AbstractClient> : FactoryBean<T> {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
----
|
||||||
======
|
======
|
||||||
|
|
||||||
A concrete client declaration should provide a resolved generic for the client, as shown in the following example:
|
A concrete client declaration should provide a resolved generic for the client, as shown in the following example:
|
||||||
|
@ -391,6 +426,19 @@ Java::
|
||||||
|
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
|
Kotlin::
|
||||||
|
+
|
||||||
|
[source,kotlin,indent=0,subs="verbatim,quotes"]
|
||||||
|
----
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
class UserConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
fun myClient() = ClientFactoryBean<MyClient>(...)
|
||||||
|
|
||||||
|
}
|
||||||
|
----
|
||||||
======
|
======
|
||||||
|
|
||||||
If the `FactoryBean` bean definition is registered programmatically, make sure to follow these steps:
|
If the `FactoryBean` bean definition is registered programmatically, make sure to follow these steps:
|
||||||
|
@ -412,6 +460,16 @@ Java::
|
||||||
// ...
|
// ...
|
||||||
registry.registerBeanDefinition("myClient", beanDefinition);
|
registry.registerBeanDefinition("myClient", beanDefinition);
|
||||||
----
|
----
|
||||||
|
|
||||||
|
Kotlin::
|
||||||
|
+
|
||||||
|
[source,kotlin,indent=0,subs="verbatim,quotes"]
|
||||||
|
----
|
||||||
|
val beanDefinition = RootBeanDefinition(ClientFactoryBean::class.java)
|
||||||
|
beanDefinition.setTargetType(ResolvableType.forClassWithGenerics(ClientFactoryBean::class.java, MyClient::class.java));
|
||||||
|
// ...
|
||||||
|
registry.registerBeanDefinition("myClient", beanDefinition)
|
||||||
|
----
|
||||||
======
|
======
|
||||||
|
|
||||||
[[aot.bestpractices.jpa]]
|
[[aot.bestpractices.jpa]]
|
||||||
|
@ -433,6 +491,19 @@ Java::
|
||||||
return factoryBean;
|
return factoryBean;
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
|
Kotlin::
|
||||||
|
+
|
||||||
|
[source,kotlin,indent=0,subs="verbatim,quotes"]
|
||||||
|
----
|
||||||
|
@Bean
|
||||||
|
fun customDBEntityManagerFactory(dataSource: DataSource): LocalContainerEntityManagerFactoryBean {
|
||||||
|
val factoryBean = LocalContainerEntityManagerFactoryBean()
|
||||||
|
factoryBean.dataSource = dataSource
|
||||||
|
factoryBean.setPackagesToScan("com.example.app")
|
||||||
|
return factoryBean
|
||||||
|
}
|
||||||
|
----
|
||||||
======
|
======
|
||||||
|
|
||||||
To make sure the scanning occurs ahead of time, a `PersistenceManagedTypes` bean must be declared and used by the
|
To make sure the scanning occurs ahead of time, a `PersistenceManagedTypes` bean must be declared and used by the
|
||||||
|
@ -458,6 +529,25 @@ Java::
|
||||||
return factoryBean;
|
return factoryBean;
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
|
Kotlin::
|
||||||
|
+
|
||||||
|
[source,kotlin,indent=0,subs="verbatim,quotes"]
|
||||||
|
----
|
||||||
|
@Bean
|
||||||
|
fun persistenceManagedTypes(resourceLoader: ResourceLoader): PersistenceManagedTypes {
|
||||||
|
return PersistenceManagedTypesScanner(resourceLoader)
|
||||||
|
.scan("com.example.app")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
fun customDBEntityManagerFactory(dataSource: DataSource, managedTypes: PersistenceManagedTypes): LocalContainerEntityManagerFactoryBean {
|
||||||
|
val factoryBean = LocalContainerEntityManagerFactoryBean()
|
||||||
|
factoryBean.dataSource = dataSource
|
||||||
|
factoryBean.setManagedTypes(managedTypes)
|
||||||
|
return factoryBean
|
||||||
|
}
|
||||||
|
----
|
||||||
======
|
======
|
||||||
|
|
||||||
[[aot.hints]]
|
[[aot.hints]]
|
||||||
|
@ -479,6 +569,13 @@ Java::
|
||||||
----
|
----
|
||||||
runtimeHints.resources().registerPattern("config/app.properties");
|
runtimeHints.resources().registerPattern("config/app.properties");
|
||||||
----
|
----
|
||||||
|
|
||||||
|
Kotlin::
|
||||||
|
+
|
||||||
|
[source,kotlin,indent=0,subs="verbatim,quotes"]
|
||||||
|
----
|
||||||
|
runtimeHints.resources().registerPattern("config/app.properties")
|
||||||
|
----
|
||||||
======
|
======
|
||||||
|
|
||||||
A number of contracts are handled automatically during AOT processing.
|
A number of contracts are handled automatically during AOT processing.
|
||||||
|
|
Loading…
Reference in New Issue