All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.aop.framework.ProxyCreatorSupport Maven / Gradle / Ivy

There is a newer version: 6.1.6
Show newest version
/*
 * Copyright 2002-2020 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.aop.framework;

import java.util.ArrayList;
import java.util.List;

import org.springframework.util.Assert;

/**
 * Base class for proxy factories.
 * Provides convenient access to a configurable AopProxyFactory.
 *
 * @author Juergen Hoeller
 * @since 2.0.3
 * @see #createAopProxy()
 */
@SuppressWarnings("serial")
public class ProxyCreatorSupport extends AdvisedSupport {

	private AopProxyFactory aopProxyFactory;

	private final List listeners = new ArrayList<>();

	/** Set to true when the first AOP proxy has been created. */
	private boolean active = false;


	/**
	 * Create a new ProxyCreatorSupport instance.
	 */
	public ProxyCreatorSupport() {
		this.aopProxyFactory = new DefaultAopProxyFactory();
	}

	/**
	 * Create a new ProxyCreatorSupport instance.
	 * @param aopProxyFactory the AopProxyFactory to use
	 */
	public ProxyCreatorSupport(AopProxyFactory aopProxyFactory) {
		Assert.notNull(aopProxyFactory, "AopProxyFactory must not be null");
		this.aopProxyFactory = aopProxyFactory;
	}


	/**
	 * Customize the AopProxyFactory, allowing different strategies
	 * to be dropped in without changing the core framework.
	 * 

Default is {@link DefaultAopProxyFactory}, using dynamic JDK * proxies or CGLIB proxies based on the requirements. */ public void setAopProxyFactory(AopProxyFactory aopProxyFactory) { Assert.notNull(aopProxyFactory, "AopProxyFactory must not be null"); this.aopProxyFactory = aopProxyFactory; } /** * Return the AopProxyFactory that this ProxyConfig uses. */ public AopProxyFactory getAopProxyFactory() { return this.aopProxyFactory; } /** * Add the given AdvisedSupportListener to this proxy configuration. * @param listener the listener to register */ public void addListener(AdvisedSupportListener listener) { Assert.notNull(listener, "AdvisedSupportListener must not be null"); this.listeners.add(listener); } /** * Remove the given AdvisedSupportListener from this proxy configuration. * @param listener the listener to deregister */ public void removeListener(AdvisedSupportListener listener) { Assert.notNull(listener, "AdvisedSupportListener must not be null"); this.listeners.remove(listener); } /** * Subclasses should call this to get a new AOP proxy. They should not * create an AOP proxy with {@code this} as an argument. */ protected final synchronized AopProxy createAopProxy() { if (!this.active) { activate(); } return getAopProxyFactory().createAopProxy(this); } /** * Activate this proxy configuration. * @see AdvisedSupportListener#activated */ private void activate() { this.active = true; for (AdvisedSupportListener listener : this.listeners) { listener.activated(this); } } /** * Propagate advice change event to all AdvisedSupportListeners. * @see AdvisedSupportListener#adviceChanged */ @Override protected void adviceChanged() { super.adviceChanged(); synchronized (this) { if (this.active) { for (AdvisedSupportListener listener : this.listeners) { listener.adviceChanged(this); } } } } /** * Subclasses can call this to check whether any AOP proxies have been created yet. */ protected final synchronized boolean isActive() { return this.active; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy