Kategorie: Java

Alle Util-Klassen des Springframeworks finden

Problem: Ich war auf der Suche nach einer bestimmten Util-Klasse aus dem Springframework, wußte aber nicht so genau, welche Utilklassen es gibt und in welchem Verzeichnis sie liegen!

Lösung: Groovy-Console öffnen:

def fileName = "C:\\springframework";
    def file = new File(fileName);
    file.eachFileRecurse {
        if(it.isFile() && it.toString().contains("Util")){
            println it
            }
    }

Hier sind die Util-KLassen vom Springframework:

C:\springframework\aop\aspectj\AspectJAopUtils.java
C:\springframework\aop\aspectj\AspectJProxyUtils.java
C:\springframework\aop\config\AopConfigUtils.java
C:\springframework\aop\config\AopNamespaceUtils.java
C:\springframework\aop\framework\AopProxyUtils.java
C:\springframework\aop\framework\autoproxy\AutoProxyUtils.java
C:\springframework\aop\scope\ScopedProxyUtils.java
C:\springframework\aop\support\AopUtils.java
C:\springframework\beans\BeanUtils.java
C:\springframework\beans\factory\BeanFactoryUtils.java
C:\springframework\beans\factory\support\AutowireUtils.java
C:\springframework\beans\factory\support\BeanDefinitionReaderUtils.java
C:\springframework\beans\factory\xml\UtilNamespaceHandler.java
C:\springframework\beans\PropertyAccessorUtils.java
C:\springframework\core\io\support\PropertiesLoaderUtils.java
C:\springframework\core\io\support\ResourcePatternUtils.java
C:\springframework\core\NestedExceptionUtils.java
C:\springframework\core\style\StylerUtils.java
C:\springframework\dao\support\DataAccessUtils.java
C:\springframework\jca\cci\connection\ConnectionFactoryUtils.java
C:\springframework\jca\work\jboss\JBossWorkManagerUtils.java
C:\springframework\jdbc\core\namedparam\NamedParameterUtils.java
C:\springframework\jdbc\core\namedparam\SqlParameterSourceUtils.java
C:\springframework\jdbc\core\StatementCreatorUtils.java
C:\springframework\jdbc\datasource\DataSourceUtils.java
C:\springframework\jdbc\support\JdbcUtils.java
C:\springframework\jdbc\support\lob\LobCreatorUtils.java
C:\springframework\jms\connection\ConnectionFactoryUtils.java
C:\springframework\jms\support\JmsUtils.java
C:\springframework\jmx\export\metadata\JmxMetadataUtils.java
C:\springframework\jmx\support\JmxUtils.java
C:\springframework\orm\hibernate3\SessionFactoryUtils.java
C:\springframework\orm\jdo\PersistenceManagerFactoryUtils.java
C:\springframework\orm\toplink\SessionFactoryUtils.java
C:\springframework\remoting\rmi\RmiClientInterceptorUtils.java
C:\springframework\remoting\support\RemoteInvocationUtils.java
C:\springframework\scripting\bsh\BshScriptUtils.java
C:\springframework\scripting\config\LangNamespaceUtils.java
C:\springframework\scripting\jruby\JRubyScriptUtils.java
C:\springframework\transaction\config\TxNamespaceUtils.java
C:\springframework\transaction\support\TransactionSynchronizationUtils.java
C:\springframework\ui\context\support\UiApplicationContextUtils.java
C:\springframework\ui\freemarker\FreeMarkerTemplateUtils.java
C:\springframework\ui\jasperreports\JasperReportsUtils.java
C:\springframework\ui\velocity\VelocityEngineUtils.java
C:\springframework\util\ClassLoaderUtils.java
C:\springframework\util\ClassUtils.java
C:\springframework\util\CollectionUtils.java
C:\springframework\util\FileCopyUtils.java
C:\springframework\util\FileSystemUtils.java
C:\springframework\util\NumberUtils.java
C:\springframework\util\ObjectUtils.java
C:\springframework\util\PatternMatchUtils.java
C:\springframework\util\ReflectionUtils.java
C:\springframework\util\ResourceUtils.java
C:\springframework\util\StringUtils.java
C:\springframework\util\SystemPropertyUtils.java
C:\springframework\util\TypeUtils.java
C:\springframework\util\xml\DomUtils.java
C:\springframework\validation\BindingResultUtils.java
C:\springframework\validation\ValidationUtils.java
C:\springframework\web\bind\RequestUtils.java
C:\springframework\web\bind\ServletRequestUtils.java
C:\springframework\web\context\support\WebApplicationContextUtils.java
C:\springframework\web\jsf\FacesContextUtils.java
C:\springframework\web\portlet\bind\PortletRequestUtils.java
C:\springframework\web\portlet\context\PortletApplicationContextUtils.java
C:\springframework\web\portlet\util\PortletUtils.java
C:\springframework\web\servlet\support\JstlUtils.java
C:\springframework\web\servlet\support\RequestContextUtils.java
C:\springframework\web\servlet\view\xslt\TransformerUtils.java
C:\springframework\web\struts\DelegatingActionUtils.java
C:\springframework\web\util\ExpressionEvaluationUtils.java
C:\springframework\web\util\HtmlUtils.java
C:\springframework\web\util\JavaScriptUtils.java
C:\springframework\web\util\TagUtils.java
C:\springframework\web\util\WebUtils.java


Tags:


Project Lombok – Sehr interessant!

Wem sein “getter/setter”-Boilerplatecode in seinen Domainenobjekten auf die Nerven geht, sollte sich mal das Project Lombok ansehen!

Nachdem man die Bibliothek eingebunden hat, werden mit @Annotations an den Objekten im Hintergrund die getter/setter sowie hashcode, toString und equals generiert. Das Schöne daran ist auch, das die Klasse leer bleibt, jedoch der Outline-View in Eclipse alle Methoden anzeigt.

Als Beispiel hier mal mein Domänenobjekt ohne Lombok (100 Zeilen):

package de.test.domain;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.hibernate.Hibernate;

public class User  implements java.io.Serializable
{

	private Integer id;
	private String name;
	private String surname;
	private String username;
	private String password;
	private Boolean active;
	private String email;

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSurname() {
		return this.surname;
	}

	public void setSurname(String surname) {
		this.surname = surname;
	}

	public String getUsername() {
		return this.username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Boolean getActive() {
		return this.active;
	}

	public void setActive(Boolean active) {
		this.active = active;
	}

	public String getEmail()
	{
		return email;
	}

	public void setEmail(String email)
	{
		this.email = email;
	}

	@Override
	public int hashCode()
	{
		return new HashCodeBuilder(17,37).append(this.getUsername()).toHashCode();
	}

	@Override
	public boolean equals(Object other)
	{
		if(this == other)
			return  true;
		if (other == null || Hibernate.getClass(this) != Hibernate.getClass(other))
			return false;

		final User rhs = (User) other;
		return new EqualsBuilder().append(this.getUsername(),rhs.getUsername()).isEquals();
	}

	@Override
	public String toString()
	{
		return "User [active=" + active + ", name=" + name + ", email=" + email + ", password="
		              + password + ", surname=" + surname + ", username=" + username
		              + "]";
	}
}

..und hier mein Domänenobjekt mit Lombok (21 Zeilen):

package de.test.domain;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@EqualsAndHashCode(exclude={"id","name","surname","password","active","email"})
@ToString(exclude="id")
public class User  implements java.io.Serializable
{

	private @Getter @Setter  Integer id;
	private @Getter @Setter  String name;
	private @Getter @Setter  String surname;
	private @Getter @Setter  String username;
	private @Getter @Setter  String password;
	private @Getter @Setter  Boolean active;
	private @Getter @Setter  String email;

}

Hier das Objekt in Eclipse:

Lombok im Eclipse-View

Lombok im Eclipse-View

Man könnte jetzt in der Lombokmagie ein Problem sehen, allerdings sehe ich eher das Problem darin, das wir langsam von der XML-Hell geradewegs in die @Annotation-Hell kommen…


Tags: