类org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor源码实例Demo

下面列出了怎么用org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor的API类实例代码及写法,或者点击链接到github查看源代码。

/**
 * Search for all DestructionAwareBeanPostProcessors in the List.
 * @param processors the List to search
 * @return the filtered List of DestructionAwareBeanPostProcessors
 */
@Nullable
private List<DestructionAwareBeanPostProcessor> filterPostProcessors(List<BeanPostProcessor> processors, Object bean) {
	List<DestructionAwareBeanPostProcessor> filteredPostProcessors = null;
	if (!CollectionUtils.isEmpty(processors)) {
		filteredPostProcessors = new ArrayList<>(processors.size());
		for (BeanPostProcessor processor : processors) {
			if (processor instanceof DestructionAwareBeanPostProcessor) {
				DestructionAwareBeanPostProcessor dabpp = (DestructionAwareBeanPostProcessor) processor;
				if (dabpp.requiresDestruction(bean)) {
					filteredPostProcessors.add(dabpp);
				}
			}
		}
	}
	return filteredPostProcessors;
}
 
/**
 * Search for all DestructionAwareBeanPostProcessors in the List.
 * @param processors the List to search
 * @return the filtered List of DestructionAwareBeanPostProcessors
 */
@Nullable
private List<DestructionAwareBeanPostProcessor> filterPostProcessors(List<BeanPostProcessor> processors, Object bean) {
	List<DestructionAwareBeanPostProcessor> filteredPostProcessors = null;
	if (!CollectionUtils.isEmpty(processors)) {
		filteredPostProcessors = new ArrayList<>(processors.size());
		for (BeanPostProcessor processor : processors) {
			if (processor instanceof DestructionAwareBeanPostProcessor) {
				DestructionAwareBeanPostProcessor dabpp = (DestructionAwareBeanPostProcessor) processor;
				if (dabpp.requiresDestruction(bean)) {
					filteredPostProcessors.add(dabpp);
				}
			}
		}
	}
	return filteredPostProcessors;
}
 
源代码3 项目: lams   文件: DisposableBeanAdapter.java
/**
 * Search for all DestructionAwareBeanPostProcessors in the List.
 * @param processors the List to search
 * @return the filtered List of DestructionAwareBeanPostProcessors
 */
private List<DestructionAwareBeanPostProcessor> filterPostProcessors(List<BeanPostProcessor> processors, Object bean) {
	List<DestructionAwareBeanPostProcessor> filteredPostProcessors = null;
	if (!CollectionUtils.isEmpty(processors)) {
		filteredPostProcessors = new ArrayList<DestructionAwareBeanPostProcessor>(processors.size());
		for (BeanPostProcessor processor : processors) {
			if (processor instanceof DestructionAwareBeanPostProcessor) {
				DestructionAwareBeanPostProcessor dabpp = (DestructionAwareBeanPostProcessor) processor;
				try {
					if (dabpp.requiresDestruction(bean)) {
						filteredPostProcessors.add(dabpp);
					}
				}
				catch (AbstractMethodError err) {
					// A pre-4.3 third-party DestructionAwareBeanPostProcessor...
					// As of 5.0, we can let requiresDestruction be a Java 8 default method which returns true.
					filteredPostProcessors.add(dabpp);
				}
			}
		}
	}
	return filteredPostProcessors;
}
 
源代码4 项目: lams   文件: DisposableBeanAdapter.java
/**
 * Check whether the given bean has destruction-aware post-processors applying to it.
 * @param bean the bean instance
 * @param postProcessors the post-processor candidates
 */
public static boolean hasApplicableProcessors(Object bean, List<BeanPostProcessor> postProcessors) {
	if (!CollectionUtils.isEmpty(postProcessors)) {
		for (BeanPostProcessor processor : postProcessors) {
			if (processor instanceof DestructionAwareBeanPostProcessor) {
				DestructionAwareBeanPostProcessor dabpp = (DestructionAwareBeanPostProcessor) processor;
				try {
					if (dabpp.requiresDestruction(bean)) {
						return true;
					}
				}
				catch (AbstractMethodError err) {
					// A pre-4.3 third-party DestructionAwareBeanPostProcessor...
					// As of 5.0, we can let requiresDestruction be a Java 8 default method which returns true.
					return true;
				}
			}
		}
	}
	return false;
}
 
/**
 * Create a new DisposableBeanAdapter for the given bean.
 */
private DisposableBeanAdapter(Object bean, String beanName, boolean invokeDisposableBean,
		boolean nonPublicAccessAllowed, @Nullable String destroyMethodName,
		@Nullable List<DestructionAwareBeanPostProcessor> postProcessors) {

	this.bean = bean;
	this.beanName = beanName;
	this.invokeDisposableBean = invokeDisposableBean;
	this.nonPublicAccessAllowed = nonPublicAccessAllowed;
	this.acc = null;
	this.destroyMethodName = destroyMethodName;
	this.beanPostProcessors = postProcessors;
}
 
/**
 * Serializes a copy of the state of this class,
 * filtering out non-serializable BeanPostProcessors.
 */
protected Object writeReplace() {
	List<DestructionAwareBeanPostProcessor> serializablePostProcessors = null;
	if (this.beanPostProcessors != null) {
		serializablePostProcessors = new ArrayList<>();
		for (DestructionAwareBeanPostProcessor postProcessor : this.beanPostProcessors) {
			if (postProcessor instanceof Serializable) {
				serializablePostProcessors.add(postProcessor);
			}
		}
	}
	return new DisposableBeanAdapter(this.bean, this.beanName, this.invokeDisposableBean,
			this.nonPublicAccessAllowed, this.destroyMethodName, serializablePostProcessors);
}
 
/**
 * Check whether the given bean has destruction-aware post-processors applying to it.
 * @param bean the bean instance
 * @param postProcessors the post-processor candidates
 */
public static boolean hasApplicableProcessors(Object bean, List<BeanPostProcessor> postProcessors) {
	if (!CollectionUtils.isEmpty(postProcessors)) {
		for (BeanPostProcessor processor : postProcessors) {
			if (processor instanceof DestructionAwareBeanPostProcessor) {
				DestructionAwareBeanPostProcessor dabpp = (DestructionAwareBeanPostProcessor) processor;
				if (dabpp.requiresDestruction(bean)) {
					return true;
				}
			}
		}
	}
	return false;
}
 
@Override
public void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) {
	Assert.notNull(beanPostProcessor, "BeanPostProcessor must not be null");
	// Remove from old position, if any
	this.beanPostProcessors.remove(beanPostProcessor);
	// Track whether it is instantiation/destruction aware
	if (beanPostProcessor instanceof InstantiationAwareBeanPostProcessor) {
		this.hasInstantiationAwareBeanPostProcessors = true;
	}
	if (beanPostProcessor instanceof DestructionAwareBeanPostProcessor) {
		this.hasDestructionAwareBeanPostProcessors = true;
	}
	// Add to end of list
	this.beanPostProcessors.add(beanPostProcessor);
}
 
/**
 * Create a new DisposableBeanAdapter for the given bean.
 */
private DisposableBeanAdapter(Object bean, String beanName, boolean invokeDisposableBean,
		boolean nonPublicAccessAllowed, @Nullable String destroyMethodName,
		@Nullable List<DestructionAwareBeanPostProcessor> postProcessors) {

	this.bean = bean;
	this.beanName = beanName;
	this.invokeDisposableBean = invokeDisposableBean;
	this.nonPublicAccessAllowed = nonPublicAccessAllowed;
	this.acc = null;
	this.destroyMethodName = destroyMethodName;
	this.beanPostProcessors = postProcessors;
}
 
/**
 * Serializes a copy of the state of this class,
 * filtering out non-serializable BeanPostProcessors.
 */
protected Object writeReplace() {
	List<DestructionAwareBeanPostProcessor> serializablePostProcessors = null;
	if (this.beanPostProcessors != null) {
		serializablePostProcessors = new ArrayList<>();
		for (DestructionAwareBeanPostProcessor postProcessor : this.beanPostProcessors) {
			if (postProcessor instanceof Serializable) {
				serializablePostProcessors.add(postProcessor);
			}
		}
	}
	return new DisposableBeanAdapter(this.bean, this.beanName, this.invokeDisposableBean,
			this.nonPublicAccessAllowed, this.destroyMethodName, serializablePostProcessors);
}
 
/**
 * Check whether the given bean has destruction-aware post-processors applying to it.
 * @param bean the bean instance
 * @param postProcessors the post-processor candidates
 */
public static boolean hasApplicableProcessors(Object bean, List<BeanPostProcessor> postProcessors) {
	if (!CollectionUtils.isEmpty(postProcessors)) {
		for (BeanPostProcessor processor : postProcessors) {
			if (processor instanceof DestructionAwareBeanPostProcessor) {
				DestructionAwareBeanPostProcessor dabpp = (DestructionAwareBeanPostProcessor) processor;
				if (dabpp.requiresDestruction(bean)) {
					return true;
				}
			}
		}
	}
	return false;
}
 
@Override
public void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) {
	Assert.notNull(beanPostProcessor, "BeanPostProcessor must not be null");
	// Remove from old position, if any
	this.beanPostProcessors.remove(beanPostProcessor);
	// Track whether it is instantiation/destruction aware
	if (beanPostProcessor instanceof InstantiationAwareBeanPostProcessor) {
		this.hasInstantiationAwareBeanPostProcessors = true;
	}
	if (beanPostProcessor instanceof DestructionAwareBeanPostProcessor) {
		this.hasDestructionAwareBeanPostProcessors = true;
	}
	// Add to end of list
	this.beanPostProcessors.add(beanPostProcessor);
}
 
源代码13 项目: lams   文件: DisposableBeanAdapter.java
/**
 * Create a new DisposableBeanAdapter for the given bean.
 */
private DisposableBeanAdapter(Object bean, String beanName, boolean invokeDisposableBean,
		boolean nonPublicAccessAllowed, String destroyMethodName,
		List<DestructionAwareBeanPostProcessor> postProcessors) {

	this.bean = bean;
	this.beanName = beanName;
	this.invokeDisposableBean = invokeDisposableBean;
	this.nonPublicAccessAllowed = nonPublicAccessAllowed;
	this.acc = null;
	this.destroyMethodName = destroyMethodName;
	this.beanPostProcessors = postProcessors;
}
 
源代码14 项目: lams   文件: DisposableBeanAdapter.java
/**
 * Serializes a copy of the state of this class,
 * filtering out non-serializable BeanPostProcessors.
 */
protected Object writeReplace() {
	List<DestructionAwareBeanPostProcessor> serializablePostProcessors = null;
	if (this.beanPostProcessors != null) {
		serializablePostProcessors = new ArrayList<DestructionAwareBeanPostProcessor>();
		for (DestructionAwareBeanPostProcessor postProcessor : this.beanPostProcessors) {
			if (postProcessor instanceof Serializable) {
				serializablePostProcessors.add(postProcessor);
			}
		}
	}
	return new DisposableBeanAdapter(this.bean, this.beanName, this.invokeDisposableBean,
			this.nonPublicAccessAllowed, this.destroyMethodName, serializablePostProcessors);
}
 
源代码15 项目: lams   文件: AbstractBeanFactory.java
@Override
public void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) {
	Assert.notNull(beanPostProcessor, "BeanPostProcessor must not be null");
	this.beanPostProcessors.remove(beanPostProcessor);
	this.beanPostProcessors.add(beanPostProcessor);
	if (beanPostProcessor instanceof InstantiationAwareBeanPostProcessor) {
		this.hasInstantiationAwareBeanPostProcessors = true;
	}
	if (beanPostProcessor instanceof DestructionAwareBeanPostProcessor) {
		this.hasDestructionAwareBeanPostProcessors = true;
	}
}
 
源代码16 项目: blog_demos   文件: DisposableBeanAdapter.java
/**
 * Create a new DisposableBeanAdapter for the given bean.
 */
private DisposableBeanAdapter(Object bean, String beanName, boolean invokeDisposableBean,
		boolean nonPublicAccessAllowed, String destroyMethodName,
		List<DestructionAwareBeanPostProcessor> postProcessors) {

	this.bean = bean;
	this.beanName = beanName;
	this.invokeDisposableBean = invokeDisposableBean;
	this.nonPublicAccessAllowed = nonPublicAccessAllowed;
	this.acc = null;
	this.destroyMethodName = destroyMethodName;
	this.beanPostProcessors = postProcessors;
}
 
源代码17 项目: blog_demos   文件: DisposableBeanAdapter.java
/**
 * Search for all DestructionAwareBeanPostProcessors in the List.
 * @param postProcessors the List to search
 * @return the filtered List of DestructionAwareBeanPostProcessors
 */
private List<DestructionAwareBeanPostProcessor> filterPostProcessors(List<BeanPostProcessor> postProcessors) {
	List<DestructionAwareBeanPostProcessor> filteredPostProcessors = null;
	if (postProcessors != null && !postProcessors.isEmpty()) {
		filteredPostProcessors = new ArrayList<DestructionAwareBeanPostProcessor>(postProcessors.size());
		for (BeanPostProcessor postProcessor : postProcessors) {
			if (postProcessor instanceof DestructionAwareBeanPostProcessor) {
				filteredPostProcessors.add((DestructionAwareBeanPostProcessor) postProcessor);
			}
		}
	}
	return filteredPostProcessors;
}
 
源代码18 项目: blog_demos   文件: DisposableBeanAdapter.java
/**
 * Serializes a copy of the state of this class,
 * filtering out non-serializable BeanPostProcessors.
 */
protected Object writeReplace() {
	List<DestructionAwareBeanPostProcessor> serializablePostProcessors = null;
	if (this.beanPostProcessors != null) {
		serializablePostProcessors = new ArrayList<DestructionAwareBeanPostProcessor>();
		for (DestructionAwareBeanPostProcessor postProcessor : this.beanPostProcessors) {
			if (postProcessor instanceof Serializable) {
				serializablePostProcessors.add(postProcessor);
			}
		}
	}
	return new DisposableBeanAdapter(this.bean, this.beanName, this.invokeDisposableBean,
			this.nonPublicAccessAllowed, this.destroyMethodName, serializablePostProcessors);
}
 
源代码19 项目: blog_demos   文件: AbstractBeanFactory.java
@Override
public void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) {
	Assert.notNull(beanPostProcessor, "BeanPostProcessor must not be null");
	this.beanPostProcessors.remove(beanPostProcessor);
	this.beanPostProcessors.add(beanPostProcessor);
	if (beanPostProcessor instanceof InstantiationAwareBeanPostProcessor) {
		this.hasInstantiationAwareBeanPostProcessors = true;
	}
	if (beanPostProcessor instanceof DestructionAwareBeanPostProcessor) {
		this.hasDestructionAwareBeanPostProcessors = true;
	}
}
 
/**
 * Create a new DisposableBeanAdapter for the given bean.
 */
private DisposableBeanAdapter(Object bean, String beanName, boolean invokeDisposableBean,
		boolean nonPublicAccessAllowed, String destroyMethodName,
		List<DestructionAwareBeanPostProcessor> postProcessors) {

	this.bean = bean;
	this.beanName = beanName;
	this.invokeDisposableBean = invokeDisposableBean;
	this.nonPublicAccessAllowed = nonPublicAccessAllowed;
	this.acc = null;
	this.destroyMethodName = destroyMethodName;
	this.beanPostProcessors = postProcessors;
}
 
/**
 * Search for all DestructionAwareBeanPostProcessors in the List.
 * @param postProcessors the List to search
 * @return the filtered List of DestructionAwareBeanPostProcessors
 */
private List<DestructionAwareBeanPostProcessor> filterPostProcessors(List<BeanPostProcessor> postProcessors) {
	List<DestructionAwareBeanPostProcessor> filteredPostProcessors = null;
	if (!CollectionUtils.isEmpty(postProcessors)) {
		filteredPostProcessors = new ArrayList<DestructionAwareBeanPostProcessor>(postProcessors.size());
		for (BeanPostProcessor postProcessor : postProcessors) {
			if (postProcessor instanceof DestructionAwareBeanPostProcessor) {
				filteredPostProcessors.add((DestructionAwareBeanPostProcessor) postProcessor);
			}
		}
	}
	return filteredPostProcessors;
}
 
/**
 * Serializes a copy of the state of this class,
 * filtering out non-serializable BeanPostProcessors.
 */
protected Object writeReplace() {
	List<DestructionAwareBeanPostProcessor> serializablePostProcessors = null;
	if (this.beanPostProcessors != null) {
		serializablePostProcessors = new ArrayList<DestructionAwareBeanPostProcessor>();
		for (DestructionAwareBeanPostProcessor postProcessor : this.beanPostProcessors) {
			if (postProcessor instanceof Serializable) {
				serializablePostProcessors.add(postProcessor);
			}
		}
	}
	return new DisposableBeanAdapter(this.bean, this.beanName, this.invokeDisposableBean,
			this.nonPublicAccessAllowed, this.destroyMethodName, serializablePostProcessors);
}
 
@Override
public void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) {
	Assert.notNull(beanPostProcessor, "BeanPostProcessor must not be null");
	this.beanPostProcessors.remove(beanPostProcessor);
	this.beanPostProcessors.add(beanPostProcessor);
	if (beanPostProcessor instanceof InstantiationAwareBeanPostProcessor) {
		this.hasInstantiationAwareBeanPostProcessors = true;
	}
	if (beanPostProcessor instanceof DestructionAwareBeanPostProcessor) {
		this.hasDestructionAwareBeanPostProcessors = true;
	}
}
 
@Override
public void destroy() {
	if (!CollectionUtils.isEmpty(this.beanPostProcessors)) {
		for (DestructionAwareBeanPostProcessor processor : this.beanPostProcessors) {
			processor.postProcessBeforeDestruction(this.bean, this.beanName);
		}
	}

	if (this.invokeDisposableBean) {
		if (logger.isTraceEnabled()) {
			logger.trace("Invoking destroy() on bean with name '" + this.beanName + "'");
		}
		try {
			if (System.getSecurityManager() != null) {
				AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> {
					((DisposableBean) this.bean).destroy();
					return null;
				}, this.acc);
			}
			else {
				((DisposableBean) this.bean).destroy();
			}
		}
		catch (Throwable ex) {
			String msg = "Invocation of destroy method failed on bean with name '" + this.beanName + "'";
			if (logger.isDebugEnabled()) {
				logger.info(msg, ex);
			}
			else {
				logger.info(msg + ": " + ex);
			}
		}
	}

	if (this.destroyMethod != null) {
		invokeCustomDestroyMethod(this.destroyMethod);
	}
	else if (this.destroyMethodName != null) {
		Method methodToCall = determineDestroyMethod(this.destroyMethodName);
		if (methodToCall != null) {
			invokeCustomDestroyMethod(methodToCall);
		}
	}
}
 
@Override
public void destroy() {
	if (!CollectionUtils.isEmpty(this.beanPostProcessors)) {
		for (DestructionAwareBeanPostProcessor processor : this.beanPostProcessors) {
			processor.postProcessBeforeDestruction(this.bean, this.beanName);
		}
	}

	if (this.invokeDisposableBean) {
		if (logger.isTraceEnabled()) {
			logger.trace("Invoking destroy() on bean with name '" + this.beanName + "'");
		}
		try {
			if (System.getSecurityManager() != null) {
				AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> {
					((DisposableBean) this.bean).destroy();
					return null;
				}, this.acc);
			}
			else {
				((DisposableBean) this.bean).destroy();
			}
		}
		catch (Throwable ex) {
			String msg = "Invocation of destroy method failed on bean with name '" + this.beanName + "'";
			if (logger.isDebugEnabled()) {
				logger.info(msg, ex);
			}
			else {
				logger.info(msg + ": " + ex);
			}
		}
	}

	if (this.destroyMethod != null) {
		invokeCustomDestroyMethod(this.destroyMethod);
	}
	else if (this.destroyMethodName != null) {
		Method methodToCall = determineDestroyMethod(this.destroyMethodName);
		if (methodToCall != null) {
			invokeCustomDestroyMethod(methodToCall);
		}
	}
}
 
源代码26 项目: lams   文件: DisposableBeanAdapter.java
@Override
public void destroy() {
	if (!CollectionUtils.isEmpty(this.beanPostProcessors)) {
		for (DestructionAwareBeanPostProcessor processor : this.beanPostProcessors) {
			processor.postProcessBeforeDestruction(this.bean, this.beanName);
		}
	}

	if (this.invokeDisposableBean) {
		if (logger.isDebugEnabled()) {
			logger.debug("Invoking destroy() on bean with name '" + this.beanName + "'");
		}
		try {
			if (System.getSecurityManager() != null) {
				AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
					@Override
					public Object run() throws Exception {
						((DisposableBean) bean).destroy();
						return null;
					}
				}, acc);
			}
			else {
				((DisposableBean) bean).destroy();
			}
		}
		catch (Throwable ex) {
			String msg = "Invocation of destroy method failed on bean with name '" + this.beanName + "'";
			if (logger.isDebugEnabled()) {
				logger.warn(msg, ex);
			}
			else {
				logger.warn(msg + ": " + ex);
			}
		}
	}

	if (this.destroyMethod != null) {
		invokeCustomDestroyMethod(this.destroyMethod);
	}
	else if (this.destroyMethodName != null) {
		Method methodToCall = determineDestroyMethod();
		if (methodToCall != null) {
			invokeCustomDestroyMethod(methodToCall);
		}
	}
}
 
源代码27 项目: blog_demos   文件: DisposableBeanAdapter.java
@Override
public void destroy() {
	if (this.beanPostProcessors != null && !this.beanPostProcessors.isEmpty()) {
		for (DestructionAwareBeanPostProcessor processor : this.beanPostProcessors) {
			processor.postProcessBeforeDestruction(this.bean, this.beanName);
		}
	}

	if (this.invokeDisposableBean) {
		if (logger.isDebugEnabled()) {
			logger.debug("Invoking destroy() on bean with name '" + this.beanName + "'");
		}
		try {
			if (System.getSecurityManager() != null) {
				AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
					@Override
					public Object run() throws Exception {
						((DisposableBean) bean).destroy();
						return null;
					}
				}, acc);
			}
			else {
				((DisposableBean) bean).destroy();
			}
		}
		catch (Throwable ex) {
			String msg = "Invocation of destroy method failed on bean with name '" + this.beanName + "'";
			if (logger.isDebugEnabled()) {
				logger.warn(msg, ex);
			}
			else {
				logger.warn(msg + ": " + ex);
			}
		}
	}

	if (this.destroyMethod != null) {
		invokeCustomDestroyMethod(this.destroyMethod);
	}
	else if (this.destroyMethodName != null) {
		Method methodToCall = determineDestroyMethod();
		if (methodToCall != null) {
			invokeCustomDestroyMethod(methodToCall);
		}
	}
}
 
@Override
public void destroy() {
	if (!CollectionUtils.isEmpty(this.beanPostProcessors)) {
		for (DestructionAwareBeanPostProcessor processor : this.beanPostProcessors) {
			processor.postProcessBeforeDestruction(this.bean, this.beanName);
		}
	}

	if (this.invokeDisposableBean) {
		if (logger.isDebugEnabled()) {
			logger.debug("Invoking destroy() on bean with name '" + this.beanName + "'");
		}
		try {
			if (System.getSecurityManager() != null) {
				AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
					@Override
					public Object run() throws Exception {
						((DisposableBean) bean).destroy();
						return null;
					}
				}, acc);
			}
			else {
				((DisposableBean) bean).destroy();
			}
		}
		catch (Throwable ex) {
			String msg = "Invocation of destroy method failed on bean with name '" + this.beanName + "'";
			if (logger.isDebugEnabled()) {
				logger.warn(msg, ex);
			}
			else {
				logger.warn(msg + ": " + ex);
			}
		}
	}

	if (this.destroyMethod != null) {
		invokeCustomDestroyMethod(this.destroyMethod);
	}
	else if (this.destroyMethodName != null) {
		Method methodToCall = determineDestroyMethod();
		if (methodToCall != null) {
			invokeCustomDestroyMethod(methodToCall);
		}
	}
}
 
 同包方法