Package org.springframework.beans.factory.serviceloader

# Class AbstractServiceLoaderBasedFactoryBean

java.lang.Object
org.springframework.beans.factory.config.AbstractFactoryBean<Object>
org.springframework.beans.factory.serviceloader.AbstractServiceLoaderBasedFactoryBean

All Implemented Interfaces:
  `Aware`, `BeanClassLoaderAware`, `BeanFactoryAware`, `DisposableBean`, `FactoryBean<Object>`, `InitializingBean`

Direct Known Subclasses:
  `ServiceFactoryBean`, `ServiceListFactoryBean`, `ServiceLoaderFactoryBean`

public abstract class AbstractServiceLoaderBasedFactoryBean extends AbstractFactoryBean<Object> implements BeanClassLoaderAware
Abstract base class for FactoryBeans operating on the JDK 1.6 `ServiceLoader` facility.

Since:
  2.5
Author:
  Juergen Hoeller
See Also:
  - `ServiceLoader`

## Field Summary

### Fields inherited from class org.springframework.beans.factory.config.AbstractFactoryBean

`logger`

### Fields inherited from interface org.springframework.beans.factory.FactoryBean

`OBJECT_TYPE_ATTRIBUTE`

## Constructor Summary

Constructors
Constructor
Description
`AbstractServiceLoaderBasedFactoryBean()`

## Method Summary

Modifier and Type
Method
Description
`protected Object`
`createInstance()`
Delegates to `getObjectToExpose(java.util.ServiceLoader)`.
`protected abstract Object`
`getObjectToExpose(ServiceLoader<?> serviceLoader)`
Determine the actual object to expose for the given ServiceLoader.
`Class<?>`
`getServiceType()`
Return the desired service type.
`void`
`setBeanClassLoader(ClassLoader beanClassLoader)`
Callback that supplies the bean `class loader` to a bean instance.
`void`
`setServiceType(Class<?> serviceType)`
Specify the desired service type (typically the service's public API).

### Methods inherited from class org.springframework.beans.factory.config.AbstractFactoryBean

`afterPropertiesSet, destroy, destroyInstance, getBeanFactory, getBeanTypeConverter, getEarlySingletonInterfaces, getObject, getObjectType, isSingleton, setBeanFactory, setSingleton`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### AbstractServiceLoaderBasedFactoryBean

public AbstractServiceLoaderBasedFactoryBean()

## Method Details

### setServiceType

public void setServiceType(@Nullable Class<?> serviceType)
Specify the desired service type (typically the service's public API).

### getServiceType

@Nullable public Class<?> getServiceType()
Return the desired service type.

### setBeanClassLoader

public void setBeanClassLoader(@Nullable ClassLoader beanClassLoader)
Description copied from interface: `BeanClassLoaderAware`
Callback that supplies the bean `class loader` to a bean instance.

Invoked after the population of normal bean properties but before an initialization callback such as `InitializingBean's` `InitializingBean.afterPropertiesSet()` method or a custom init-method.

Specified by:
  `setBeanClassLoader` in interface `BeanClassLoaderAware`
Overrides:
  `setBeanClassLoader` in class `AbstractFactoryBean<Object>`
Parameters:
  `beanClassLoader` - the owning class loader

### createInstance

protected Object createInstance()
Delegates to `getObjectToExpose(java.util.ServiceLoader)`.

Specified by:
  `createInstance` in class `AbstractFactoryBean<Object>`
Returns:
  the object to expose
See Also:
  - `AbstractFactoryBean.getObject()`

### getObjectToExpose

protected abstract Object getObjectToExpose(ServiceLoader<?> serviceLoader)
Determine the actual object to expose for the given ServiceLoader.

Left to concrete subclasses.

Parameters:
  `serviceLoader` - the ServiceLoader for the configured service class
Returns:
  the object to expose