在构造函数上使用@Autowired

时间:2016-08-02 09:10:53

标签: java spring

在构造函数上使用@Autowired的好处是什么,

viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        updateButtonPosition(position, positionOffsetPixels);
    }
});


//Move the button according to the tab you want it to be fixed. 
//Here is the 3rd tab of a 3 tab viewPager, for instance
private void updateButtonPosition(int position, int positionOffsetPixels) {
    int fixedRewardXPos;
    if (position == 0) {
        fixedRewardXPos = viewPager.getWidth() * 2 - positionOffsetPixels;
    } else if (position == 1) {
        fixedRewardXPos = viewPager.getWidth() - positionOffsetPixels;
    } else {
        fixedRewardXPos = -positionOffsetPixels;
    }

    //Add getLeft() to keep the button to its former position in it's fragment
    aButton.setX(fixedRewardXPos + aButton.getLeft());
}

4 个答案:

答案 0 :(得分:6)

这样bean A将被注入构造函数中。它更清晰,因为你可以声明bean的依赖关系,因为它不能在不提供A的情况下实例化。这使测试变得更加容易。

答案 1 :(得分:1)

您可以在班级中拥有final个字段,通常甚至是不可变的类 - 更少移动的部分,更清晰的代码,更容易理解。

这个类更容易测试,你总是知道要在其中设置哪个属性来创建一个工作类(因为构造函数会强制你设置它们) - 当然有人可能仍会在参数中传递空值。

答案 2 :(得分:0)

它只是constructor based dependency injection

此链接将包含更多信息 Constructor based dependency injection

答案 3 :(得分:-1)

如果您想了解有关@Autowired

的更多信息

Spring解释了它的文档:

  1. Javadoc在构造函数上自动连接
  2. SpringFramework documentation解释如何在构造函数,setter和属性上使用它。
  3. 如果找到注释@Autowired

    ,那么当spring创建bean时会自动装配一个litle简历。