能@Component
,@Repository
并@Service
注释互换在Spring中,还是他们提供任何特殊的功能,除了作为一个符号设备?
换句话说,如果我有一个Service类并且我将注释更改@Service
为@Component
,它仍然会以相同的方式运行吗?
或者注释是否也会影响类的行为和功能?
我希望使我的代码更具可读性,并使用IDE代码检查和/或静态代码分析(FindBugs和Sonar)等工具来避免NullPointerExceptions.许多工具似乎与彼此的@NotNull
/ @NonNull
/ @Nonnull
注释不兼容,并列出我的代码中的所有这些工具都很难阅读.有什么建议是"最好的"吗?这是我发现的等效注释列表:
javax.validation.constraints.NotNull
创建用于运行时验证,而不是静态分析.
文件
edu.umd.cs.findbugs.annotations.NonNull
由Findbugs静态分析使用,因此Sonar(现为Sonarqube)
文档
javax.annotation.Nonnull
这可能也适用于Findbugs,但JSR-305处于非活动状态.(另请参阅:JSR 305的状态是什么?)
来源
org.jetbrains.annotations.NotNull
由IntelliJ IDEA IDE用于静态分析.
文件
lombok.NonNull
用于控制Project Lombok中的代码生成.
占位符注释,因为没有标准.
来源,
文档
android.support.annotation.NonNull
Android中提供的标记注释,由support-annotations包
文档提供
org.eclipse.jdt.annotation.NonNull
Eclipse用于静态代码分析
文档
我正在学习春天3,我似乎没有把握背后的功能<context:annotation-config>
和<context:component-scan>
.
根据我的阅读,他们似乎处理不同的注释(@ Required,@ Autowired etc vs @Component,@ Repository,@ Service等),但也从我读过的内容中注册了相同的bean后处理器类.
为了让我更加困惑,有一个@Required
属性@Autowired
.
有人可以对这些标签有所了解吗?什么是相似的,什么是不同的,一个被另一个取代,它们相互完成,我需要其中一个,两者都有吗?
你应该把它@Transactional
放在DAO
类和/或它们的方法中,还是更好地注释使用DAO对象调用的Service类?或者注释两个"层"是否有意义?
使用Java @Override
注释的最佳实践是什么?为什么?
使用@Override
注释标记每个重写方法似乎有点过分.是否有某些编程情况需要使用@Override
和其他不应该使用的@Override
?
我在尝试获取JSON请求并处理它时收到以下错误:
org.codehaus.jackson.map.JsonMappingException:找不到类型[simple type,class com.myweb.ApplesDO]的合适构造函数:无法从JSON对象实例化(需要添加/启用类型信息?)
这是我要发送的JSON:
{
"applesDO" : [
{
"apple" : "Green Apple"
},
{
"apple" : "Red Apple"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在Controller中,我有以下方法签名:
@RequestMapping("showApples.do")
public String getApples(@RequestBody final AllApplesDO applesRequest){
// Method Code
}
Run Code Online (Sandbox Code Playgroud)
AllApplesDO是ApplesDO的包装器:
public class AllApplesDO {
private List<ApplesDO> applesDO;
public List<ApplesDO> getApplesDO() {
return applesDO;
}
public void setApplesDO(List<ApplesDO> applesDO) {
this.applesDO = applesDO;
}
}
Run Code Online (Sandbox Code Playgroud)
ApplesDO:
public class ApplesDO {
private String apple;
public String getApple() {
return apple;
}
public void setApple(String appl) { …
Run Code Online (Sandbox Code Playgroud) 是否应该使用实现接口方法的方法进行注释@Override
?
指示方法声明旨在覆盖超类中的方法声明.如果使用此批注类型注释方法但不覆盖超类方法,则编译器需要生成错误消息.
我不认为接口在技术上是超类.或者是吗?
两者之间的主要区别是什么
@Before
和 @BeforeClass
@BeforeEach
和@BeforeAll
@After
和 @AfterClass
根据JUnit Api @Before
用于以下情况:
编写测试时,通常会发现多个测试需要在运行之前创建类似的对象.
而@BeforeClass
可用于建立数据库连接.但不能@Before
做同样的事情?
我知道@Component
在Spring 2.5中引入了注释,以便通过使用类路径扫描来消除xml bean的定义.
@Bean
是在3.0版本中引入的,可以用来@Configuration
完全摆脱xml文件并使用java配置.
是否可以重复使用@Component
注释而不是引入@Bean
注释?我的理解是,最终目标是在两种情况下都创建bean.
在查看Python 3.3语法规范时,我最近发现了一些有趣的东西:
funcdef: 'def' NAME parameters ['->' test] ':' suite
Run Code Online (Sandbox Code Playgroud)
Python 2中没有可选的"箭头"块,我在Python 3中找不到任何有关其含义的信息.事实证明这是正确的Python并且它被解释器接受:
def f(x) -> 123:
return x
Run Code Online (Sandbox Code Playgroud)
我认为这可能是某种先决条件语法,但是:
x
在这里测试,它仍未定义,2 < 1
),它都不会影响功能行为.任何习惯这种语法的人都可以解释一下吗?
annotations ×10
java ×9
spring ×5
autowired ×1
dao ×1
ide ×1
interface ×1
jackson ×1
json ×1
junit ×1
junit4 ×1
junit5 ×1
null ×1
oop ×1
python ×1
python-3.x ×1
spring-3 ×1
spring-mvc ×1
transactions ×1