小编mat*_*t b的帖子

Java List toArray(T [] a)实现

我只是在查看List接口中定义的方法:

以正确的顺序返回包含此列表中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型.如果列表适合指定的数组,则返回其中.否则,将使用指定数组的运行时类型和此列表的大小分配新数组.如果列表适合指定的数组,并且空间足够(即,数组的元素多于列表),则紧跟集合结尾的数组中的元素将设置为null.仅当调用者知道列表不包含任何null元素时,这在确定列表长度时很有用.

<T> T[] toArray(T[] a);
Run Code Online (Sandbox Code Playgroud)

而我只是想知道为什么它以这种方式实现,基本上如果你传递一个长度为<listTeize()的数组,它只会创建一个新的并返回它.因此,在方法参数中创建新的Array对象是没用的.

另外,如果你使用列表的大小传递一个足够长的数组,如果返回与对象相同的对象 - 返回它真的没有意义,因为它是同一个对象但是为了清晰起见.

问题是我认为这会促使代码效率稍低,在我看来,Array应该只是接收类并只返回带有内容的新数组.

有没有理由说它没有这样编码?

java generics list toarray

11
推荐指数
2
解决办法
1万
查看次数

如何访问Velocity模板中的静态成员?

我不确定是否有办法在Velocity中执行此操作:

我有一个用户POJO,其中一个名为Status的属性,看起来像一个枚举(但它不是,因为我被困在Java 1.4上),定义看起来像这样:

public class User  {

    // default status to User
    private Status status = Status.USER;

    public void setStatus(Status status) {
        this.status = status;
    }

    public Status getStatus() {
        return status;
    }
Run Code Online (Sandbox Code Playgroud)

而Status是一个静态的内部类:

public static final class Status {

    private String statusString;

    private Status(String statusString) {
        this.statusString = statusString;
    }

    public final static Status USER = new Status("user");
    public final static Status ADMIN = new Status("admin");
    public final static Status STATUS_X = new Status("blah");

    //.equals() and .hashCode() implemented as …
Run Code Online (Sandbox Code Playgroud)

java model-view-controller velocity

10
推荐指数
2
解决办法
1万
查看次数

在Spring中为不同的数据源设置事务的正确方法是什么?

我有一个需要连接到多个数据库的应用程序.这是一个管理应用程序,主要用于管理不同数据库中的条目 - 我们不需要同时访问多个数据库,也不需要任何类型的分布式事务管理.

基本上,应用程序的一个区域允许您在数据库A中创建小工具,而应用程序的另一个区域允许您在数据库B中配置类似的小工具.

当使用一个数据源时,我们已经设置了事务并且工作正常.配置如下所示:

<aop:config>
    <aop:pointcut id="companyServicePoint" 
          expression="execution(* com.company.service.CompanyService.*(..))" />

    <aop:advisor advice-ref="companyServiceTxAdvice"
         pointcut-ref="companyServicePoint"/>
</aop:config>

<tx:advice id="companyServiceTxAdvice" transaction-manager="txManager">
    <tx:attributes>
        <!-- set propogation required on create methods, all others are read-only -->
        <tx:method name="create*" propagation="REQUIRED"/>
        <tx:method name="*" read-only="true" />
    </tx:attributes>
</tx:advice>

<bean id="txManager" 
   class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>
Run Code Online (Sandbox Code Playgroud)

这为任何执行任何方法设置切入点CompanyService,并将事务通知与切入点相关联,切入点需要对名称以"create"开头的任何方法进行事务处理.事务通知与TransactionManager相关联,该TransactionManager与dataSource相关联.

添加第二个(或更多)数据源时,如何将相同的事务建议应用于其他数据源?由于AOP建议只能与一个只能与一个dataSource关联的transactionManager关联,我是否需要设置重复的事务建议?

如果我为同一个切入点设置重复的事务建议,这是否意味着我的CompanyService接口中的任何方法调用都需要对我的所有 dataSource 进行传播?

为了使我的上一个问题更加清晰,我将声明多个bean实现CompanyService接口,并且每个bean都有一个单独的bean CompanyDAO来访问它们各自的DataSource.我担心这种方法意味着当companyService1调用bean 时,将在allcompanyService beans/dataSources 上触发事务建议.

我是以错误的方式来做这件事的吗?

更新:我实际上已经测试了我上面谈到的配置(将两个顾问程序连接到同一个切入点),并且在CompanyService实现的任何单个实例上调用任何方法确实在两个dataSource上创建了新的事务,正如预期的那样:

DEBUG company.serviceDataSourceTransactionManager - Creating new …
Run Code Online (Sandbox Code Playgroud)

java spring transactions

10
推荐指数
1
解决办法
1万
查看次数

为什么Spring框架被称为"非侵入式"?

Spring框架是非 - INTRUSIVE.

你能详细说明一下吗?

谢谢 :)

java spring dependency-injection

10
推荐指数
2
解决办法
3692
查看次数

有些东西可能出错,但也不例外

我经常处于这样一种情况:我有一种方法会出现问题但是例外情况不适合使用,因为它并不例外.

例如:

我正在设计一个垄断游戏.类银行有一个方法buyHouse和一个计算剩余房屋数量的字段(垄断中有32个房屋).可能出错的是玩家在剩下0时买房子.我该怎么办呢 这是我能提出的3种方法.

1. public void buyHouse(Player player, PropertyValue propertyValue)
{
    if(houseCount < 0) throw new someException;
    ....
    //Not really an exceptional situation
}

2. public boolean buyHouse(Player player, PropertyValue propertyValue)
{
    if(houseCount < 0) return false;
    ....
    //This I think is the most normal approach but changing something
    //and returning if it was a success seems bad practice to me.
}

3. public boolean housesLeft()
{
    if(houseCount > 0) return true;

    return false;

    //Introducing a new method. But …
Run Code Online (Sandbox Code Playgroud)

java oop methods exception

10
推荐指数
2
解决办法
273
查看次数

cascade ="all-delete-orphan"在与连接表的Hibernate单向多对多关联中有什么意义吗?

我有两个对象形成父子关系,它们具有多对多的关系.按照Hibernate参考手册中的建议,我使用连接表映射了这个:

<class name="Conference" table="conferences">
    ...
    <set name="speakers" table="conference_speakers" cascade="all">
        <key column="conference_id"/>
        <many-to-many class="Speaker" column="speaker_id"/>
    </set>
</class>

<class name="Speaker" table="speakers">
    <id name="id" column="id">
        <generator class="native"/>
    </id>
    <property name="firstName"/>
    <property name="lastName"/>
</class>
Run Code Online (Sandbox Code Playgroud)

我希望单个演讲者可以与许多不同的会议相关联,而且任何会议不再引用的演讲者都会从speakers表格中删除(因为没有相关会议的演讲者在我的项目中没有多大意义) ).

但是,我发现,如果我使用cascade="all-delete-orphan",那么如果其中一个会议中删除与多个会议相关联的扬声器,则Hibernate会尝试删除扬声器实例本身.

下面是一个显示此行为的单元测试:

@Test
public void testRemoveSharedSpeaker() {

    int initialCount = countRowsInTable("speakers");

    Conference c1 = new Conference("c1");
    Conference c2 = new Conference("c2");

    Speaker s = new Speaker("John", "Doe");

    c1.getSpeakers().add(s);
    c2.getSpeakers().add(s);

    conferenceDao.saveOrUpdate(c1);
    conferenceDao.saveOrUpdate(c2);
    flushHibernate();

    assertEquals(initialCount + 1, countRowsInTable("speakers"));
    assertEquals(2, countRowsInTable("conference_speakers"));

    // the …
Run Code Online (Sandbox Code Playgroud)

java many-to-many hibernate cascade orphan

10
推荐指数
1
解决办法
3万
查看次数

在生产系统上详细分析Tomcat Heap

分析了在tomcat中运行的轻量级Web应用程序,使用JMX控制台,结果发现"PS Old Gen"正在缓慢但不变地增长.它从200MB开始,每小时增长约80MB.

CPU不是问题,它平均运行在0-1%,但它在某处泄漏内存,因此在部署后几天它会变得不稳定.

我如何找出堆上分配的对象?你知道有什么好的教程或工具吗?

java heap tomcat jmx

9
推荐指数
1
解决办法
8444
查看次数

Zend框架:使用模型和视图,最佳实践

我对面向对象编程比较陌生.我非常理解这些概念,但实际上,我很难找到有关如何在我的Zend Framework应用程序中最好地使用模型的信息.

具体来说,我有一个不使用数据库表的模型(不扩展任何东西).它使用getter和setter来访问其受保护的成员.我发现自己正在努力学习如何在视图中最好地展示这个模型.我在视图模板中不需要逻辑,但我发现自己处于以下情况:

在我的控制器中:

$object = new Object();
$object->setName('Foo Bar');
$this->view->object = $object;
Run Code Online (Sandbox Code Playgroud)

在我的视图模板中:

<h2><?= $this->object->getName() ?></h2>
Run Code Online (Sandbox Code Playgroud)

我真的不喜欢在我的视图模板中调用函数,但我不知道更好的方法.我不希望我的模型成员公开,但我基本上想要达到相同的结果:

<h2><?= $this->object->name ?></h2>
Run Code Online (Sandbox Code Playgroud)

我不希望我的控制器完成所有关于模型的所有工作:

$object = new Object();
$object->setName('Foo Bar');
$this->view->object = $object;
$this->view->object->name = $object->getName();
Run Code Online (Sandbox Code Playgroud)

在Zend Framework中使用模型的最佳实践是什么?任何人都可以推荐任何可以帮助我理解Zend Framework中的模型/视图困境的教程吗?

php zend-framework model

9
推荐指数
1
解决办法
9091
查看次数

jQuery ajax()调用偶尔会导致错误,XmlHttpRequest响应状态为0

我们的Web应用程序中的一个页面使用jQuery的ajax()方法大约每10秒轮询一次服务器以获取新数据.我们通常有几百名用户同时查看此页面,因此我们的服务器每秒会收到多个请求.负载不是任何问题.

对于我们访问者中的一小部分,jQuery ajax()调用会偶尔触发它的错误事件.大多数这些错误事件都是明显的错误(例如访问者遇到网络问题时超时),但是这些错误中的一小部分我很难找到原因,而且我有点困惑.

我们正在连接一个像这样的全局错误监听器

$.ajaxSetup({ 
    timeout: oursettings.timeout,
    error: function(xhr, status, e){
         // error handling goes here
    }
});
Run Code Online (Sandbox Code Playgroud)

对于这个特定的错误子集,jQuery给我们带来了status一些"error".通过jQuery源代码(特别是第3574行)读取错误仅在XmlHttpRequest readystate具有值4(意味着它DONE)并且HTTP响应状态超出成功值(< 200>= 300)时使用此值抛出.

但是,当我们检查XmlHttpRequest对象本身时,我们发现它的(HTTP响应)状态为0.根据XHR规范,当"错误标志为真",应设置状态0 .

这是我真的很困惑的地方,因为XmlHttpRequest规范中关于"错误标志" 的唯一其他事情

DONE状态具有相关的错误标志,指示某种类型的网络错误或堕胎.它可以是true或false,初始值为false.

规范没有说明保留这个错误标志的属性或位置(即,它是否可用xhr.error?).

所以我想我的问题归结为:这将是正确的我们的Ajax的错误处理代码假设击中我们的错误处理程序与jQuery的状态的任何事件"error"xhr.status0,以引起通过"网络错误或流产"?

是否有任何其他条件或任何其他人看到的可能导致XmlHttpRequest readystate DONE (4)的HTTP响应状态为0?我希望能够排除服务器端错误的任何可能性(因为我们的服务器端日志没有显示任何内容),并且要更改错误处理逻辑以不将此方案视为致命错误(这导致用户看到一堆大红色警报类型错误消息).

ajax jquery xmlhttprequest

9
推荐指数
1
解决办法
4357
查看次数

依赖注入

public interface ITaskProvider
{
    T GetTask<T>();
}
Run Code Online (Sandbox Code Playgroud)

在下面的ITaskprovider的实现中,正如您所看到的那样,IUserTask和IIdentityTask是从属性而不是构造函数注入的.原因是Windsor在访问时自动实例化运行时注入的属性,因此我不必将所有必须注入的依赖项放在构造函数中.

public class TaskProvider : ITaskProvider
    {
        public IUserTasks UserTasks { get; set; }

        public IIdentityTasks IdentityTasks { get; set; }

        public T GetTask<T>()
        {
            Type type = typeof(T);
            if (type == typeof(IUserTasks)) return (T)this.UserTasks;
            if (type == typeof(IIdentityTasks)) return (T)this.IdentityTasks;

            return default(T);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在控制器中,我在构造函数中注入ITaskProvider.

public ITaskProvider TaskProvider { get; set; }

public AuctionsController(ITaskProvider taskProvider)
        {
            TaskProvider = taskProvider;
        }
Run Code Online (Sandbox Code Playgroud)

在这里,我称任务提供者及其方法很好.

public ActionResult Index()
{
 var userTasks = TaskProvider.GetTask<IUserTasks>();
 var user = …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection

9
推荐指数
1
解决办法
658
查看次数