Я искал способ сделать это сам, не добавляя дополнительной зависимости от пути к классам. После некоторого исследования я обнаружил, что он доступен , если у вас есть общий супертип. Это было хорошо для меня, поскольку я работал с слоем DAO с супертипом общего уровня. Если это соответствует вашему сценарию, то это самый аккуратный подход IMHO.
Большинство дженериков используют случаи, с которыми я столкнулся, имеют какой-то общий супертип, например. List
для ArrayList
или GenericDAO
для DAO
и т. д.
Статья Доступ к родовым типам во время выполнения в Java объясняет, как вы можете это сделать, используя чистую Java.
В моем проекте использовалась Spring , которая еще лучше поскольку Spring имеет удобный метод утилиты для поиска типа. Это лучший подход для меня, поскольку он выглядит аккуратно. Я думаю, если бы вы не использовали Spring, вы могли бы написать свой собственный метод полезности.
import org.springframework.core.GenericTypeResolver;
public abstract class AbstractHibernateDao implements DataAccessObject
{
@Autowired
private SessionFactory sessionFactory;
private final Class genericType;
private final String RECORD_COUNT_HQL;
private final String FIND_ALL_HQL;
@SuppressWarnings("unchecked")
public AbstractHibernateDao()
{
this.genericType = (Class) GenericTypeResolver.resolveTypeArgument(getClass(), AbstractHibernateDao.class);
this.RECORD_COUNT_HQL = "select count(*) from " + this.genericType.getName();
this.FIND_ALL_HQL = "from " + this.genericType.getName() + " t ";
}
Используйте как ServerName
, так и ServerAlias
. Вот что я использую для своих шаблонов -
Для не SSL -
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www-example.com
<directory /var/www-example.com>
Options All
AllowOverride All
Require all granted
</directory>
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>
И с SSL из LetsEncrypt -
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
RewriteEngine on
RewriteRule ^/(.*)$ https://www.example.com/$1 [R,L]
</VirtualHost>
<VirtualHost 10.0.2.5:443>
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@example.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
DocumentRoot /var/www-example.com
<directory /var/www-example.com>
Options All
AllowOverride All
Require all granted
</directory>
ErrorLog ${APACHE_LOG_DIR}/ssl-example.com-error.log
CustomLog ${APACHE_LOG_DIR}/ssl-example.com-access.log combined
</VirtualHost>