java我应该用@Component注释pojo类吗?
我搜索了是否应该用@Component注释POJO。似乎不建议对pojo进行注释
下面是我的OrderStatusMnemonic配置类,它读取txt文件:
@Configuration
public class OrderStatusMnemonic {
private static final Logger log = LoggerFactory.getLogger("OrderStatusMnemonic.class");
private ResourceLoader resourceLoader;
@Autowired
public OrderStatus orderStatus;
public OrderStatusMnemonic(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
}
@PostConstruct
public void init() {
try {
log.info("Loading order-status-mnemonic file ");
Resource resource = resourceLoader.getResource("classpath:order-status-mnemonic.txt");
InputStream inputStream = resource.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
String str;
List<String> orderStatusMnemonicList = new ArrayList<>();
while ( (str = bufferedReader.readLine()) != null) {
log.info("str = " + str);
orderStatusMnemonicList.add(str);
}
orderStatus.setValues(orderStatusMnemonicList);
log.info("orderStatusMnemonicList = " + orderStatusMnemonicList.toString());
} catch (IOException | NullPointerException e) {
log.error("Failing to Load order status mnemonic file" + e.getMessage(), e);
}
}
}
订单状态POJO:
@Getter
@Setter
@ToString
public class OrderStatus {
private List<String> values;
}
由于我是自动连接OrderStatus POJO类,因此出现错误:
Consider defining a bean of type 'com.spectrum.sci.osm.orderstatus.OrderStatus' in your configuration.
# 1 楼答案
任何被用作
light weight bean
并被处理/称为POJO的plain-vanilla Java Class
都不应与任何Spring组件绑定java类可以用spring注释(即
@Component
、@Service
、@Bean
、@Configuration
)中的任何一个进行修饰,前提是该类已被adding extra flavour
增强,并且仅当该类用于支持除getter setter属性之外的具有增强功能的其他类@Autowired
只能在类被任何spring组件标记时使用,因为@Autowired
是spring注释,它将只扫描正在使用spring管理的那些bean# 2 楼答案
您现在的,您也不应该尝试在任何地方
OrderStatus
不需要注释@Component
,因此不应添加注释。此外,如果没有^{@Autowire
使用它您当然可以添加
@Component
,然后@Autowire
将其添加到您需要的任何位置,但这没有任何意义,因为只需发出new OrderStatus()
就可以更轻松地实例化POJO。这也可能是对资源的浪费那么,您什么时候需要这两个注释?每当您的POJO需要成为托管bean时。换句话说,当Spring需要做一些自动化的事情时。考虑你的POJO会有更复杂的东西,比如(检查评论):
# 3 楼答案
@Component或@Autowired应仅用于Spring管理的类。POJO不是由Spring管理的。因此,既不应该添加@component,也不应该自动连接它。因为您试图自动连接POJO类,所以定义OrderStatus类型的bean时会出现错误