使用getter和setter的优点是什么 - 只能获取和设置 - 而不是简单地使用公共字段来存储这些变量?
如果getter和setter做的不仅仅是简单的get/set,我可以非常快地解决这个问题,但我并不是100%清楚如何:
public String foo;
Run Code Online (Sandbox Code Playgroud)
更糟糕的是:
private String foo;
public void setFoo(String foo) { this.foo = foo; }
public String getFoo() { return foo; }
Run Code Online (Sandbox Code Playgroud)
而前者需要很少的样板代码.
我正在使用Mockito @Mock和@InjectMocks注释将依赖项注入到使用Spring注释的私有字段中@Autowired:
@RunWith(MockitoJUnitRunner.class)
public class DemoTest {
@Mock
private SomeService service;
@InjectMocks
private Demo demo;
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
和
public class Demo {
@Autowired
private SomeService service;
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
现在我想将真实对象注入私有@Autowired字段(没有setter).这是可能的还是机制仅限于注射Mocks?
我在这里找不到任何合理的答案所以我希望它不是重复的.那么为什么我更喜欢setter或构造函数注入而不是简单
@Inject
MyBean bean;
Run Code Online (Sandbox Code Playgroud)
如果你需要在类初始化期间对注入的bean执行某些操作,我会使用构造函数注入
public void MyBean(@Inject OtherBean bean) {
doSomeInit(bean);
//I don't need to use @PostConstruct now
}
Run Code Online (Sandbox Code Playgroud)
但是,它几乎和@PostConstruct方法一样,我根本没有得到setter注入,它不仅仅是Spring和其他DI框架之后的遗物吗?
我看到了这个问题
关于如何手动注入带注释的私有字段(方式是添加setter或通过构造函数)
但是,重点是应用程序服务器(如glassfish,axis2,jboss,...)如何能够注入最终的私有字段(不向用户类添加setter或构造函数)?
引用引用的问题:
public SomeClass {
@Inject
private SomeResource resource;
}
Run Code Online (Sandbox Code Playgroud)
他们是否使用允许访问私有字段的自定义JVM(不是标准的JVM)?
谢谢