我想从基于xml的spring配置切换到基于java的。对于构造函数类型的注入,很容易。我正在使用的示例:
@Configuration
public class BeanConfiguration {
@Bean
public GreetingService greetingService(GreetingDao greetingDao) {
return new GreetingService(greetingDao);
}
@Bean
public GreetingDao greetingDao() {
return new GreetingDao();
}
}
然而,当我想通过setter方法注入时,我正在做这样的事情:
@Configuration
public class BeanConfiguration {
@Bean
public MeetingDao meetingDao() {
return new MeetingDao();
}
@Bean
public MeetingService meetingService(MeetingDao meetingDao) {
MeetingService meetingService = new MeetingService();
meetingService.setMeetingDao(meetingDao);
return meetingService;
}
}
我不确定这是否是一种注入基于Java的Configuration和setter方法的可行方法。不幸的是我找不到任何示例(对于构造函数依赖项,存在很多示例)。另外,我不确定基于Java的配置何时应该使用构造函数和何时使用setter。在Spring文档中,描述了我应该使用构造函数来获取可选依赖项的必需和setter。但是,我认为这种方法的结果相同。 谢谢你的任何澄清。
亚当
答案 0 :(得分:0)
假设你不能自己更改类,你可能总是在注入所有值之前不返回bean。
CREATE TRIGGER [dbo].ToMetadataJobNumberCreation
--only if tblTometadata.TOMetadataJobNumber is updated with new jobnumber
ON [dbo].tblTometadata
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE (TOMetadataJobNumber)
BEGIN
UPDATE eventLogs
SET dataPointValue = TOMetadataJobNumber,
dataPointType = 'JOBNUMBER'
FROM eventLogs
JOIN inserted ins on ins.TOMetadataParentJobID = dataPointValue
WHERE dataPointType = 'ORDERNUMBER';
END
END
构造函数注入总是首选,具有类依赖性,但并非总是可行。 如果您有权更改正在创建的这些服务和bean的源代码,那么我建议使用构造函数注入并放置" @ Service"在班级和" @ Autowired"在构造函数上。
属性是"可选"的一个例子。依赖;如果未提供,则默认值和行为是常见的。我更喜欢放置" @ Value"直接在该字段而不是我的构造函数,因为否则你可能会得到太多的参数。这是" setter"注射,但你不想要一个真正的setter方法(再次,通常不是反正);你只希望Spring更改值,而不是任何其他代码。
使用" @ Value"如果你只有一两个属性(或3个?它不是一门精确的科学),那就好了;但是,如果你发现你有很多字段" @ Value"那么你应该使用配置bean。一个" @ConfigurationProperties" bean也可以用" setter"注入,但我更喜欢构造函数注入,以确保至少bean永远不会为null,即使它的值可能是。